これは、配列フィールドのparameters
が存在するドキュメントとクエリが一致しないためです。 正確な配列オブジェクトを値として持つ[{"foo": "bar", "ding": "dong"}]
。これを示すために、コレクションにいくつかのサンプルドキュメントを挿入しましょう:
/* 0 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e48f"),
"parameters" : [
{
"foo" : "bar"
}
]
}
/* 1 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e490"),
"parameters" : [
{
"foo" : "bar",
"ding" : "dong"
}
]
}
このコレクションでparameters
をクエリする このオブジェクトを含む配列配列[{"foo":"bar"}]
"_id"のドキュメントが表示されます:ObjectId("551d777fcfd33f4e2a61e48f")
。ただし、クエリオブジェクトを変更して $elemMatch
次に、両方のドキュメントが表示されます:
db.collection.find({"parameters": { "$elemMatch": { "foo": "bar" } }});