Vì có rất nhiều nhầm lẫn về truy vấn Bộ sưu tập MongoDB với các tài liệu phụ , tôi nghĩ rằng giá trị của nó để giải thích các câu trả lời ở trên với các ví dụ:
Đầu tiên tôi chỉ chèn hai đối tượng trong bộ sưu tập là: message
as:
> db.messages.find().pretty()
{
"_id" : ObjectId("5cce8e417d2e7b3fe9c93c32"),
"headers" : {
"From" : "reservations@marriott.com"
}
}
{
"_id" : ObjectId("5cce8eb97d2e7b3fe9c93c33"),
"headers" : {
"From" : "reservations@marriott.com",
"To" : "kprasad.iitd@gmail.com"
}
}
>
Vì vậy, kết quả của truy vấn là gì: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Nó phải là một bởi vì các truy vấn này cho các tài liệu có headers
cùng đối tượng {From: "reservations@marriott.com"}
, chỉ có nghĩa là không chứa các trường khác hoặc chúng ta nên chỉ định toàn bộ tài liệu phụ là giá trị của một trường.
Vì vậy, theo câu trả lời từ @ Edmondo1984
Công bằng khớp trong tài liệu phụ chọn tài liệu nếu tài liệu con khớp chính xác với tài liệu phụ được chỉ định, bao gồm cả thứ tự trường .
Từ các câu trên, kết quả truy vấn dưới đây là gì?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
Và nếu chúng ta sẽ thay đổi thứ tự From
và To
nghĩa là giống như tài liệu phụ của tài liệu thứ hai thì sao?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
vì vậy, nó khớp chính xác với tài liệu con được chỉ định, bao gồm cả thứ tự trường .
Đối với việc sử dụng toán tử chấm, tôi nghĩ rằng nó rất rõ ràng cho mọi người. Hãy xem kết quả của truy vấn dưới đây:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
Tôi hy vọng những giải thích này với ví dụ trên sẽ giúp ai đó rõ ràng hơn trong việc tìm kiếm truy vấn với các tài liệu phụ .