Estoy usando la última versión de Mongo C# controlador que utiliza una gran cantidad de Async y el generador de patrón. Lo cual es bueno. Estoy tratando de convertir las cláusulas where de SQL en Mongo FilterDefinition objeto.

Alguna idea de cómo manejar la «contiene»?

como:

where x contains 'ABC'
  • Es x una cadena?
InformationsquelleAutor Mr767267 | 2015-08-21

4 Comentarios

  1. 5

    Si x es una cadena, puede hacerlo con un simple regex. Para el 2.0 controlador, puede crear manualmente la FilterDefinition:

    FilterDefinition<BsonDocument> filter = "{ x : { $regex : /ABC/} }";

    O construir el filtro de utilizar el Builder:

    var builder = Builders<BsonDocument>.Filter;
    var filter = builder.Matches("x", "ABC");

    A continuación, puede utilizar el filtro en la consulta:

    using (var cursor = await collection.Find(filter).ToCursorAsync())
    {
        //...
    }
    • Gracias! Estoy usando la versión 2.0 del conductor y no podía .(Partidos) en el Filtro del Generador, pero me podría encontrar .Regex(), así que voy a probar con eso.
  2. 13

    Con el fin de lograr que en la versión 2 del API, el uso del Filtro.Regex’:

    var collection = db.GetCollection<BsonDocument>("collection");
    
    var filter = Builders<BsonDocument>.Filter.Regex("fieldName", new BsonRegularExpression(".*fieldValue.*"));
    
    var data = await (await coll.FindAsync<BsonDocument>(filter).ConfigureAwait(false)).ToListAsync();
    
    //continue process data 
  3. 1

    Primer lugar, le recomiendo que se tome MongoDB University .NET curso (de Mongo en sí). Es muy completo, y cubre tu pregunta (y más) en profundidad.

    Segundo, supongo que x es una matriz en su ejemplo.

    MongoDB maneja correctamente polimorfismo con matrices. Si usted tiene una clase Post con una matriz de Tags, puede filtrar donde Tag = ABC.

    Si estás usando C#, linq métodos, que se parece a .Find(p => p.Tags == "ABC"). Si usted está usando BsonDocument, que parece new BsonDocument().Add("Tags", "ABC").

  4. 0

    Tengo otro camino que no me gusta, pero funciona. La respuesta está marcada como correcta es la mitad de malo (los Partidos es un método de Constructores). En este ejemplo, el /la ley como un % en una consulta sql COMO declaración. Todavía estoy en busca de una mejor manera y se actualizará si me encuentro con uno que es más es Igual a filtrar a continuación.

    List<yourobject> someList = await collection.Find("{ x: /Test/}").ToListAsync();
    
    var filter = Builders<yourobject>.Filter.Eq("x", "ABC");
    List<yourobject> someList = await collection.Find(filter).ToListAsync();
    • Su constructor método para el filtro no es correcta. No puede ser Igual, ya que usted está buscando Contiene.

Dejar respuesta

Please enter your comment!
Please enter your name here