Uw vraag retourneert eenvoudigweg alle documenten die een modules
bevatten element waar name == 'foo'
. Om $elemMatch
te gebruiken om de uitvoer te filteren, moet u deze gebruiken in het projectie-argument van de find
aanroepen in plaats van een deel van de vraag:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
Om beide concepten te combineren, kunt u verwijzen naar de index van het array-element dat in de query overeenkomt met $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
Hoe dan ook keert terug:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Als u andere velden nodig heeft die in de uitvoer moeten worden opgenomen, voegt u deze toe aan het projectieobject (bijv. name: 1
).