ฉันเป็นสามเณร MongoDB ดังนั้นโปรดยกโทษให้ฉันหากคำถามนี้มีคำตอบที่ชัดเจน ...
บริบท:
ฉันได้ปฏิบัติตามตัวอย่างในเอกสาร MongoDB เพื่อใช้การรวมแบบลำดับชั้น ใช้แผนที่-ลด ตัวอย่างใช้ฟิลด์ "compound" _id
เป็นคีย์ลดแผนที่ซึ่งสร้างเอกสารรวมเช่นนี้...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z") },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
ทั้งหมดนี้เป็นสิ่งที่ดีและดี กรณีการใช้งานเฉพาะของฉันกำหนดให้ส่งค่าสำหรับคีย์ที่คล้ายกัน หลาย ในแต่ละ map
ขั้นตอน ตัวอย่างเช่น...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), hobby: "wizardry" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), gender: "male" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
(ค่าจะเท่ากัน แต่คีย์ _id
แตกต่างกันเล็กน้อย)
นี่ก็ดีและดีเช่นกัน
คำถาม:
ตอนนี้ ฉันต้องการรวมคอลเลกชันตามลำดับชั้น (มุมมอง) ของฉัน ซึ่งมีเอกสารที่มีฟิลด์ผสม _id
ที่แตกต่างกันหลายรายการ แต่จะรวมเฉพาะกับเอกสารที่มีฟิลด์ $match
ing _id
เท่านั้น ตัวอย่างเช่น ฉันต้องการรวมเฉพาะเอกสารที่มีประเภท {u: String, d: Date, hobby: String}
_id
หรือเฉพาะเอกสารที่มีประเภท _id
{u: String, d: Date}
ฉันทราบว่าฉันสามารถใช้ตัวดำเนินการ $exists
เพื่อจำกัดฟิลด์ _id
ใดที่ควรและไม่ควรได้รับอนุญาต แต่ฉันไม่ต้องการสร้างการรวมแยกกันสำหรับแต่ละ _id
(อาจมีหลายรายการ)
มีวิธีง่ายๆ ในการจำกัดเอกสาร $match
ing โดยทางโปรแกรมไว้เฉพาะเอกสารที่มี (หรือไม่มี) ฟิลด์เฉพาะในการรวมหรือไม่