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.

MongoDB reintenta la coincidencia / si no hay coincidencia, intenta otra / agregación.

Lo que quiero lograr es emparejar un documento con cierto “id” (no “_id”). Pero si no se encuentra la primera coincidencia, entonces intentar emparejar otro id. Luego emparejar un tercer valor “question”.
Si se encuentra el primer documento, el segundo documento no debe ser emparejado.

código pseudo:

if (se empareja el primer id)
  {emparejar question}
else if (se empareja el segundo id)
  {emparejar question}

He intentado esto:

     "$match": 
        {
            "$and":
            [
                {
                    "$or":[{"id": 78975 },{ "id": 99 }]
                },
                {
                    "question":{"$exists":True}
                }
            ]
        }

Pero esto potencialmente emparejará dos documentos.
Incluso si uso “{ $limit : 1 }”, no puedo estar seguro de que el primer id no haya sido emparejado, y por lo tanto el segundo documento no debe ser incluido.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr la lógica de correspondencia deseada, se puede usar el siguiente pipeline:

    [
        {
            "$match": {
                "$or": [
                    {"id": 78975},
                    {"id": 99}
                ]
            }
        },
        {
            "$limit": 1
        },
        {
            "$project": {
                "_id": 0,
                "id": 1,
                "question": 1
            }
        },
        {
            "$match": {
                "question": {"$exists": true}
            }
        }
    ]
    

    Este pipeline primero busca documentos que tengan un campo id igual a 78975 o 99. Luego limita los resultados a un máximo de 1 documento, asegurándose de que solo se incluya una de las dos posibles coincidencias de id. El documento resultante se proyecta para incluir solo los campos id y question. Finalmente, el pipeline busca documentos que tengan un campo question que exista.

    Este pipeline primero intentará hacer coincidir el primer id y, si encuentra una coincidencia, pasará a buscar el campo question. Si la coincidencia del primer id no existe o no tiene un campo question, intentará hacer coincidir el segundo id. Si existe un campo question en alguno de los dos documentos, se incluirá en el resultado final.

    Tenga en cuenta que si hay varios documentos que coinciden con el primer id, el pipeline seleccionará solo el primero encontrado debido a la etapa $limit. Si es importante incluir todos los documentos coincidentes, se puede eliminar la etapa $limit.

Comments are closed.