Tengo subdocumentos dentro de documentos. Y estoy tratando de obtener documentos completos si algún subdocumento proporciona múltiples condiciones. Funciona correctamente, excepto que no muestra subdocumentos no coincidentes.
# EXAMPLE DOCUMENT name: "Sam", specs: [ {city: "istanbul", color: "blue"}, {city: "istanbul", color: "black"}, {city: "izmir", color: "yellow"} ] # QUERY Dudes.aggregate([ {$unwind: '$specs'}, {$match: {'specs.city': "istanbul", 'specs.color': "yellow"} } ]);Está devolviendo los documentos coincidentes, pero en los documentos solo hay un subdocumento coincidente.
# OUTPUT: name: "Sam", specs: [ {city: "izmir", color: "yellow"} ]Demostración actualizada: https://mongoplayground.net/p/J1GF0ErYNEk
Use $elemMatch para hacer coincidir el objeto dentro del elemento de matriz.
db.collection.find({ specs: { $elemMatch: { "city": "istanbul", "color": "blue" } } });Demostración: https://mongoplayground.net/p/Wr1L6i2dipP
Puede usar directamente $match y eliminar {$unwind: '$specs'}
db.collection.aggregate([ { $match: { "specs.city": "istanbul", "specs.color": "blue" } } ]);