MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zagnieżdżone zapytanie tablicowe MongoDB

Po uruchomieniu kilku zapytań doszedłem do wniosku, że $in nie działa dla tablicy tablic .

Możesz użyć $elemMatch zamiast tego i będzie działać, ale frustrujące jest to, że dokumentacja MongoDB nie ostrzega o tym.

Utworzyłem ten dokument:

{
      "_id": "51cb12857124a215940cf2d4",
      "level1": [
        [
          "item00",
          "item01"
        ],
        [
          "item10",
          "item11"
        ]
      ],
      "items": [
        "item20",
        "item21"
      ]
}

Zauważ, że pole "items" jest tablicą ciągów i to zapytanie działa idealnie:

db.nested.findOne({"items":{"$in":["item20"]} })

Teraz "level1.0" jest również tablicą łańcuchów, jedyną różnicą jest to, że znajduje się wewnątrz innej tablicy. To zapytanie powinno działać, ale nie jest:

db.nested.findOne({"level1.0":{"$in":["item00"]} })

Jedynym sposobem na uzyskanie wyniku jest użycie $elemMatch:

db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })

Więc $elemMatch rozwiązuje problem, ale prawdziwym rozwiązaniem jest aktualizacja dokumentacji MongoDB, aby stwierdzała, że ​​$in nie działa dla tablic tablic. Być może powinieneś przesłać prośbę do 10gen.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB na komputerze z systemem Windows 7:nie można nawiązać połączenia

  2. Klucze obce w mongo?

  3. W jaki sposób MongoDB unika bałaganu związanego z iniekcją SQL?

  4. Jak mogę wygenerować ObjectId z mangustą?

  5. Czy GridFS jest wystarczająco szybki i niezawodny do produkcji?