Su consulta simplemente devuelve todos los documentos que contienen modules
elemento donde name == 'foo'
. Para usar $elemMatch
para filtrar la salida, debe usarla en el argumento de proyección de find
llamar en lugar de parte de la consulta:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
Para combinar ambos conceptos, puede hacer referencia al índice del elemento de matriz coincidente en la consulta con $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
De cualquier manera devuelve:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Si necesita incluir otros campos en la salida, agréguelos al objeto de proyección (por ejemplo, name: 1
).