MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявка за вложен масив в MongoDB

След като изпълних някои заявки, стигнах до заключението, че $in не работи за масив от масиви .

Можете да използвате $elemMatch вместо това и ще работи, но е разочароващо, че документацията на MongoDB не предупреждава за това.

Създадох този документ:

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

Забележете, че полето "items" е масив от низове и тази заявка работи перфектно:

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

Сега "level1.0" също е масив от низове, единствената разлика е, че е вътре в друг масив. Тази заявка трябва да работи, но не е:

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

Единственият начин да получите резултата е да използвате $elemMatch:

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

Така че $elemMatch решава проблема, но истинското решение е да се актуализира документацията на MongoDB, за да гласи, че $in не работи за масиви от масиви. Може би трябва да изпратите заявка до 10gen.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ключови неща за наблюдение в MongoDB

  2. Какъв е правилният начин да стартирате услуга mongod на linux / OS X?

  3. Функция Azure с интеграция на Cosmos MongoDB не се запазва

  4. Наблюдение на екземпляри на MongoDB с помощта на услуга за наблюдение на MongoDB (MMS)

  5. MongoDB:Твърде много позиционни (т.е. „$“) елементи, открити в пътя