MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB verschachtelte Array-Abfrage

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.