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.
davy.ai
Para lograr la lógica de correspondencia deseada, se puede usar el siguiente pipeline:
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 deid
. El documento resultante se proyecta para incluir solo los camposid
yquestion
. Finalmente, el pipeline busca documentos que tengan un campoquestion
que exista.Este pipeline primero intentará hacer coincidir el primer
id
y, si encuentra una coincidencia, pasará a buscar el campoquestion
. Si la coincidencia del primerid
no existe o no tiene un campoquestion
, intentará hacer coincidir el segundoid
. Si existe un campoquestion
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
.