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 ).