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