Din forespørgsel returnerer simpelthen alle dokumenter, der indeholder et modules
element hvor name == 'foo'
. For at bruge $elemMatch
for at filtrere outputtet skal du bruge det i projektionsargumentet for find
ring i stedet for en del af forespørgslen:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
For at kombinere begge begreber kan du referere til indekset for matrixelementet, der matches i forespørgslen med $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
Uanset hvad returnerer:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Hvis du har brug for andre felter inkluderet i outputtet, skal du tilføje dem til projektionsobjektet (f.eks. name: 1
).