Permintaan Anda hanya mengembalikan semua dokumen yang berisi modules
elemen di mana name == 'foo'
. Untuk menggunakan $elemMatch
untuk memfilter output, Anda perlu menggunakannya dalam argumen proyeksi find
panggil alih-alih bagian dari kueri:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})
Untuk menggabungkan kedua konsep, Anda dapat mereferensikan indeks elemen array yang cocok dengan kueri dengan $
:
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})
Cara mana pun akan kembali:
{
"_id": ObjectId("..."),
"modules": [
{
"name": "foo",
"mandatory": false,
"group": [
{
"name": "g1"
}
]
}
]
}
Jika Anda memerlukan bidang lain yang disertakan dalam output, tambahkan bidang tersebut ke objek proyeksi (mis. name: 1
).