クエリは、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 。