Dies liegt daran, dass die Abfrage keine Dokumente abgleichen kann, in denen das Array-Feld parameters
hat das exakte Array-Objekt als Wert [{"foo": "bar", "ding": "dong"}]
. Um dies zu demonstrieren, fügen wir ein paar Beispieldokumente in eine Sammlung ein:
/* 0 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e48f"),
"parameters" : [
{
"foo" : "bar"
}
]
}
/* 1 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e490"),
"parameters" : [
{
"foo" : "bar",
"ding" : "dong"
}
]
}
Abfragen dieser Sammlung nach parameters
Array mit diesem Objektarray [{"foo":"bar"}]
bringt das Dokument mit "_id" :ObjectId("551d777fcfd33f4e2a61e48f")
. Wenn Sie jedoch Ihr Abfrageobjekt ändern, um $elemMatch
dann bringt es beide Dokumente:
db.collection.find({"parameters": { "$elemMatch": { "foo": "bar" } }});