Ihre Abfrage gibt einfach alle Dokumente zurück, die modules
enthalten Element wobei name == 'foo'
. Um $elemMatch
zu verwenden Um die Ausgabe zu filtern, müssen Sie es im Projektionsargument von find
verwenden Rufen Sie anstelle eines Teils der Abfrage auf:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
Um beide Konzepte zu kombinieren, können Sie mit $
auf den Index des in der Abfrage gefundenen Array-Elements verweisen :
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
So oder so wird zurückgegeben:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Wenn Sie andere Felder in der Ausgabe benötigen, fügen Sie sie dem Projektionsobjekt hinzu (z. B. name: 1
).