Nachdem ich einige Abfragen ausgeführt hatte, kam ich zu dem Schluss, dass $in für ein Array von Arrays nicht funktioniert .
Sie können $elemMatch
verwenden stattdessen und es wird funktionieren, aber es ist frustrierend, dass die MongoDB-Dokumentation nicht davor warnt.
Ich habe dieses Dokument erstellt:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Beachten Sie, dass das Feld „items“ ein Array von Strings ist und diese Abfrage perfekt funktioniert:
db.nested.findOne({"items":{"$in":["item20"]} })
Jetzt ist "level1.0" auch ein Array von Strings, der einzige Unterschied besteht darin, dass es sich in einem anderen Array befindet. Diese Abfrage sollte funktionieren, ist es aber nicht:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
Die einzige Möglichkeit, das Ergebnis zu erhalten, ist die Verwendung von $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Also $elemMatch
löst das Problem, aber die eigentliche Lösung besteht darin, die MongoDB-Dokumentation so zu aktualisieren, dass sie besagt, dass $in
funktioniert nicht für Arrays von Arrays. Vielleicht sollten Sie eine Anfrage an 10gen senden.