es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consultar una colección de Mongo dinámicamente en c#

Soy un traductor de documentos de IT en español. Traduzca lo siguiente al español. No traduzcas el código y la salida en Markdown.

Soy nuevo en C# mongo, antes trabajé en Node y Mongo. Tengo una colección llamada tareas. A continuación se muestra un registro de muestra.

{
    "_id": ObjectId("6193bfba23855443a127466a"),
    "taskIdentifier": LUUID("00000000-0000-0000-0000-000000000000"),
    "title": "PR Liquidators",
    "company": "iuytreugdfh",
    "purpose": "test purpose",
    "column": "Search",
    "assignTo": "Shiva",
    "assignToId": ObjectId("61933b47a79ac615648a7855"),
    "assignToImage": null,
    "notes": "ggh@William james ",
    "done": 0,
    "taskID": "00029",
    "status": "Pending",
    "states": [ 
        "Alabama - AL", 
        "Alaska - AK"
    ],
    "active": true,
    "updatedAtUtc": ISODate("2021-11-18T12:26:37.616Z"),
    "updatedBy": ""
}

En mi proyecto C# Web API siempre obtengo una matriz llamada filterCriteria de la solicitud API del siguiente formulario:

filterCriteria=[
{key:"purpose",value:"test purpose",type:"eq"},
{key:"active",value:true,type:"eq"}
]

Ahora quiero consultar la colección de mongo llamada tasks usando los filterCriteria dados.

Intenté algo usando declaraciones LINQ pero no funciona: la codificación rígida funciona pero no dinámicamente. ¿Cómo puedo lograr esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para realizar una consulta en la colección tasks de MongoDB utilizando los criterios de filtro dados en C#, se puede utilizar las clases FilterDefinitionBuilder y Builders proporcionadas por el controlador de MongoDB para C#.

    Aquí hay una implementación de ejemplo:

    using MongoDB.Driver;
    
    // Suponiendo que ya se ha configurado y conectado el cliente de MongoDB
    
    // Recuperar el array filterCriteria de la solicitud y convertirlo en un array de BsonDocuments
    BsonDocument[] filterCriteria = Newtonsoft.Json.JsonConvert.DeserializeObject<bsondocument[]>(Request["filterCriteria"]);
    
    // Construir el filtro para la consulta MongoDB de manera dinámica en función de filterCriteria
    FilterDefinitionBuilder<bsondocument> filterBuilder = Builders<bsondocument>.Filter;
    FilterDefinition<bsondocument> filter = filterBuilder.Empty;
    
    foreach(BsonDocument criteria in filterCriteria) {
        switch(criteria["type"].ToString()) {
            case "eq":
                filter &= filterBuilder.Eq(criteria["key"].ToString(), criteria["value"]);
                break;
            case "ne":
                filter &= filterBuilder.Ne(criteria["key"].ToString(), criteria["value"]);
                break;
            // Agregar más casos para otras operaciones según sea necesario
        }
    }
    
    // Utilizar el filtro para realizar una consulta a la colección de tareas
    IMongoCollection<bsondocument> tasksCollection = database.GetCollection<bsondocument>("tasks");
    List<bsondocument> tasks = tasksCollection.Find(filter).ToList();
    

    En esta implementación, primero recuperamos el array filterCriteria de la solicitud y lo convertimos en un array de objetos BsonDocument utilizando la librería Newtonsoft.Json. Luego construimos el filtro para la consulta MongoDB de manera dinámica en función de los filterCriteria utilizando un bucle foreach y una declaración switch para manejar diferentes tipos de operaciones (eq, ne, etc.). Finalmente, utilizamos el filtro para realizar una consulta a la colección tasks y devolver los resultados como una lista de objetos BsonDocument.</bsondocument[]>

Comments are closed.