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

Truy vấn MongoDB bên trong một mảng lồng nhau

As you ony match với one , bạn chỉ phải thể hiện đường dẫn đến trường của mình bằng ký hiệu dấu chấm:

> db.user.find({"profile.wishlist._id": 2})

Như đã giải thích trong Tài liệu MongoDB , cho mảng (như wishlist ) điều này sẽ khớp với một tài liệu nếu bất kỳ tài liệu con trong mảng khớp với giá trị trường.

Xin lưu ý rằng nếu bạn cần so khớp với một số , bạn cần sử dụng một trong hai trường:

  • $elemMatch nếu tất cả các trường phù hợp phải thuộc về giống nhau tài liệu phụ;
  • hoặc nhiều trường được thể hiện bằng cách sử dụng ký hiệu dấu chấm nếu các trường khác nhau không cần khớp với cùng một tài liệu con.

Vui lòng so sánh kết quả đầu ra của hai truy vấn đó để nắm được điều này:

> db.user.find({"profile.wishlist._id": 2, "profile.wishlist.name": "a1"})
//                                      ^                            ^^
//                              will return your document even if the was no 
//                              subdocument having both _id=2 and name=a1
> db.user.find({"profile.wishlist": {$elemMatch: { _id: 2, name: "a1"}}})
//                                                      ^         ^^
//                                         no result as there was no subdocument
//                                         matching  _both_ _id=2 and name=a1



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose:CastError:Không thể truyền tới ObjectId cho giá trị “tôi” tại đường dẫn “_id”

  2. Thêm / trừ ngày vào ISODate trong MongoDB Shell

  3. Sự cố Google Compute Engine safe_format_mount - chỉ định lỗi loại hệ thống tệp

  4. Bộ đếm nguyên tử Postgres vs MongoDB

  5. Làm thế nào để phân tầng xóa tài liệu trong mongodb?