Twoje zapytanie po prostu zwraca wszystkie dokumenty zawierające modules
element gdzie name == 'foo'
. Aby użyć $elemMatch
aby filtrować dane wyjściowe, należy go użyć w argumencie projekcji funkcji find
zadzwoń zamiast części zapytania:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
Aby połączyć obie koncepcje, możesz odwołać się do indeksu elementu tablicy dopasowanego w zapytaniu za pomocą $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
W obie strony powraca:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Jeśli potrzebujesz innych pól zawartych w danych wyjściowych, dodaj je do obiektu rzutowania (np. name: 1
).