เนื่องจากมีความสับสนมากมายเกี่ยวกับการสืบค้น MongoDB ซึ่งมีเอกสารย่อยฉันคิดว่ามันคุ้มค่าที่จะอธิบายคำตอบข้างต้นด้วยตัวอย่าง:
ครั้งแรกฉันได้แทรกสองวัตถุในคอลเลกชันคือ: message
เป็น:
> 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"
}
}
>
ดังนั้นผลลัพธ์ของแบบสอบถามคืออะไร: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
มันควรจะเป็นหนึ่งเพราะแบบสอบถามเหล่านี้สำหรับเอกสารที่headers
เท่ากับวัตถุ{From: "reservations@marriott.com"}
เท่านั้นเช่นไม่มีเขตข้อมูลอื่นหรือเราควรระบุทั้งเอกสารย่อยเป็นค่าของเขตข้อมูล
ดังนั้นตามคำตอบจาก @ Edmondo1984
ความเท่าเทียมกันตรงที่อยู่ในเอกสารย่อยเลือกเอกสารหากเอกสารย่อยตรงว่าเอกสารย่อยที่กำหนดรวมถึงการสั่งซื้อสนาม
จากข้อความข้างต้นผลลัพธ์แบบสอบถามด้านล่างควรเป็นอย่างไร
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
และถ้าเราจะเปลี่ยนลำดับFrom
และTo
เช่นเดียวกับเอกสารย่อยของเอกสารที่สอง
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
ดังนั้นมันตรงตรงที่ระบุย่อยเอกสารรวมทั้งการสั่งซื้อสนาม
สำหรับการใช้ตัวดำเนินการ dot ฉันคิดว่ามันชัดเจนสำหรับทุก ๆ คน มาดูผลลัพธ์ของการค้นหาด้านล่าง:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
ฉันหวังว่าคำอธิบายเหล่านี้ด้วยตัวอย่างข้างต้นจะทำให้คนที่ชัดเจนมากขึ้นในแบบสอบถามพบกับเอกสารย่อย