La tua query sta semplicemente restituendo tutti i documenti che contengono un modules
elemento dove name == 'foo'
. Per usare $elemMatch
per filtrare l'output, devi usarlo nell'argomento di proiezione di find
chiama invece di una parte della query:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
Per combinare entrambi i concetti, puoi fare riferimento all'indice dell'elemento dell'array corrispondente nella query con $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
In entrambi i casi restituisce:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Se hai bisogno di altri campi inclusi nell'output, aggiungili all'oggetto di proiezione (es. name: 1
).