Để thư giãn, hãy sử dụng $ unwind. $ Unwind giải mã một trường mảng từ các tài liệu đầu vào để xuất ra một tài liệu cho mỗi phần tử.
Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> db.demo515.insertOne( ... { ... "details1": [ ... "4700100004" ... ], ... "details2": [ ... "Not Given" ... ], ... "Value1": [ ... "56", ... "45", ... "35", ... ], ... "Value2": [ ... "35", ... "45", ... "56", ... ]} ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e889e51987b6e0e9d18f590") }
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.demo515.find();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : [ "56", "45", "35" ], "Value2" : [ "35", "45", "56" ] }
Sau đây là truy vấn để giải phóng hai mảng -
> db.demo515.aggregate([ ... { $unwind: { path: "$Value1", includeArrayIndex : "index1" } }, ... { $unwind: { path: "$Value2", includeArrayIndex : "index2" } }, ... { $project: { ... _id : 1, ... details1: 1, ... details2: 1, ... Value1: 1, ... Value2: 1, ... valid: { $eq: ["$index1", "$index2"] } } ... }, ... { $match: { valid: true } } ... ]);
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : "56", "Value2" : "35", "valid" : true } { "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : "45", "Value2" : "45", "valid" : true } { "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [ "Not Given" ], "Value1" : "35", "Value2" : "56", "valid" : true }