Descripción:
Solo quiero regresar si todos los objetos en la matriz coinciden con la condición. Ahora, devuelve el objeto si al menos una condición coincide en la matriz de objetos.
Si tienen más consultas con respecto a esta pregunta. Responderé por favor pregunte!
Aporte:
[ { "_id":"4", "intends":[ { "_id":"1", "status":"Packed" }, { "_id":"2", "status":"Packed" } ] }, { "_id":"5", "intends":[ { "_id":"3", "status":"Packed" }, { "_id":"4", "status":"Created" } ] } ]Salida de corriente:
[ { "_id":"4", "intends":[ { "_id":"1", "status":"Packed" }, { "_id":"2", "status":"Packed" } ] }, { "_id":"5", "intends":[ { "_id":"3", "status":"Packed" }, { "_id":"4", "status":"Created" } ] } ]Rendimiento esperado:
[ { "_id":"4", "intends":[ { "_id":"1", "status":"Packed" }, { "_id":"2", "status":"Packed" } ] } ]Yo he tratado:
db.collection.find({intends.status: "Packed"}) db.collection.find({intends: {$elemMatch: {status: "Packed"}}})Una posible solución usando $elemMatch , $nin y $not .
La $elemMatch , $nin proporcionará todos los elementos donde haya al menos un elemento con estado que no sea "Empacado". Entonces $not lo revertirá y dará elementos donde cada estado sea "Empacado"
db.collection.find({ intends: { "$not": { "$elemMatch": { status: { "$nin": [ "Packed" ] } } } } }) ACTUALIZAR Desde aquí, solo verifique 1 valor, use $ne en lugar de $nin
db.collection.find({ intends: { $not: { $elemMatch: { status: { $ne: "Packed" } } } } })usando aggregation $redact y $allElementsTrue
pruébalo en mongoPlayground
db.collection.aggregate([ { "$redact": { "$cond": [ { "$allElementsTrue": { "$map": { "input": "$intends", "as": "intend", "in": { "$eq": [ "$$intend.status", "Packed" ] } } } }, "$$KEEP", "$$PRUNE" ] } } ])