Dzieje się tak, ponieważ zapytanie nie może pasować do żadnego dokumentu, w którym pole tablicy parameters ma dokładny obiekt tablicy jako swoją wartość [{"foo": "bar", "ding": "dong"}] . Aby to zademonstrować, wstawmy do kolekcji kilka przykładowych dokumentów:
/* 0 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e48f"),
"parameters" : [
{
"foo" : "bar"
}
]
}
/* 1 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e490"),
"parameters" : [
{
"foo" : "bar",
"ding" : "dong"
}
]
}
Wysyłanie zapytania do tej kolekcji o parameters tablica z tym obiektem tablica [{"foo":"bar"}] przyniesie dokument z "_id" :ObjectId("551d777fcfd33f4e2a61e48f") . Jeśli jednak zmienisz obiekt zapytania tak, aby używał $elemMatch
wtedy przyniesie oba dokumenty:
db.collection.find({"parameters": { "$elemMatch": { "foo": "bar" } }});