Váš dotaz jednoduše vrací všechny dokumenty, které obsahují modules
prvek kde name == 'foo'
. Chcete-li použít $elemMatch
k filtrování výstupu jej musíte použít v argumentu projekce find
volání místo části dotazu:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
Chcete-li zkombinovat oba koncepty, můžete odkazovat na index prvku pole shodného v dotazu pomocí $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
V obou případech se vrátí:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Pokud potřebujete do výstupu zahrnout další pole, přidejte je do objektu projekce (např. name: 1
).