MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Truy vấn mảng lồng nhau MongoDB

Sau khi chạy một số truy vấn, tôi đã đi đến kết luận rằng $ in không hoạt động đối với một mảng của mảng .

Bạn có thể sử dụng $elemMatch thay vào đó và nó sẽ hoạt động, nhưng thật khó chịu khi tài liệu của MongoDB không cảnh báo về điều đó.

Tôi đã tạo tài liệu này:

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

Lưu ý rằng trường "items" là một mảng các chuỗi và truy vấn này hoạt động hoàn hảo:

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

Bây giờ, "level1.0" cũng là một mảng các chuỗi, sự khác biệt duy nhất là nó nằm trong một mảng khác. Truy vấn này sẽ hoạt động nhưng không hoạt động:

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

Cách duy nhất để nhận được kết quả là sử dụng $ elemMatch:

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

Vì vậy, $elemMatch giải quyết vấn đề, nhưng giải pháp thực sự là cập nhật tài liệu của MongoDB để nói rằng $in không hoạt động đối với mảng của mảng. Có lẽ bạn nên gửi yêu cầu tới 10gen.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ trong Nhà điều hành đường ống tổng hợp

  2. Hướng dẫn cấu hình bộ cân bằng tải trong cụm phân chia MongoDB

  3. Hướng dẫn triển khai và bảo trì MongoDB bằng con rối:Phần 1

  4. Phương thức Meteor so với quy tắc từ chối / cho phép

  5. Cập nhật mảng với nhiều điều kiện trong mongodb