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