สำหรับกรณีนี้ ให้ใช้ aggregate() ร่วมกับ $unwind มาสร้างคอลเล็กชันกันเถอะ
> db.demo583.insert([
{
"details1" : [
{
"details2" : [
{
"isMarried" : true,
"Name" : "Chris"
},
{
"isMarried" : true,
"Name" : "Bob"
}
]
},
{
"details2" : [
{
"isMarried" : false,
"Name" : "Chris"
},
{
"isMarried" : true,
"Name" : "Mike"
}
]
}
]
}
]);
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 1, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
แสดงเอกสารทั้งหมดด้วยเมธอด find()
> db.demo583.find();
ผลลัพธ์ที่ได้
{ "_id" : ObjectId("5e91d3c4fd2d90c177b5bcc1"), "details1" : [ { "details2" : [ { "isMarried" : true, "Name" : "Chris" }, { "isMarried" : true, "Name" : "Bob" } ] }, { "details2" : [ { "isMarried" : false, "Name" : "Chris" }, { "isMarried" : true, "Name" : "Mike" } ] } ] }
คำสั่งกรองซับเอกสารด้วยซับเอกสาร (isMarried=true และ Name=Chris)
> var q= [
{
"$match": {
"details1.details2.isMarried": true,
"details1.details2.Name": "Chris"
}
},
{
"$unwind": "$details1"
},
{
"$unwind": "$details1.details2"
},
{
"$match": {
"details1.details2.isMarried": true,
"details1.details2.Name": "Chris"
}
}
];
> db.demo583.aggregate(q).pretty();
ผลลัพธ์ที่ได้
{ "_id" : ObjectId("5e91d3c4fd2d90c177b5bcc1"), "details1" : { "details2" : { "isMarried" : true, "Name" : "Chris" } } }