Đối với điều này, hãy sử dụng tổng hợp () cùng với $ unwind. Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> 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" : [ ]
}) Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -
> db.demo583.find();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e91d3c4fd2d90c177b5bcc1"), "details1" : [
{ "details2" : [
{ "isMarried" : true, "Name" : "Chris" },
{ "isMarried" : true, "Name" : "Bob" }
] },
{ "details2" : [
{ "isMarried" : false, "Name" : "Chris" },
{ "isMarried" : true, "Name" : "Mike" }
] }
] } Sau đây là truy vấn để lọc tài liệu con theo tài liệu con -
> 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(); Điều này sẽ tạo ra kết quả sau -
{
"_id" : ObjectId("5e91d3c4fd2d90c177b5bcc1"),
"details1" : {
"details2" : {
"isMarried" : true,
"Name" : "Chris"
}
}
}