Вашата заявка просто връща всички документи, които съдържат modules
елемент, където name == 'foo'
. За да използвате $elemMatch
за да филтрирате изхода, трябва да го използвате в аргумента за проекция на find
извикване вместо част от заявката:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
За да комбинирате и двете концепции, можете да посочите индекса на елемента на масива, съвпадащ в заявката с $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
Така или иначе връща:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Ако имате нужда от други полета, включени в изхода, добавете ги към обекта за проектиране (напр. name: 1
).