Bạn có thể đi theo tuyến khung tổng hợp, có khả năng làm phẳng các mảng thông qua $unwind
nhà điều hành. Thao tác này sẽ tạo một bản ghi mới cho từng và mọi phần tử của trường dữ liệu danh sách mà chương trình thư giãn được áp dụng. Về cơ bản, nó làm phẳng dữ liệu.
Sau khi làm phẳng dữ liệu, bạn sẽ yêu cầu $lookup
toán tử để thực hiện "tham gia" trên products
trường products
thu thập. Lặp lại quy trình cho lược đồ các loại quả lồng nhau.
Hãy xem một ví dụ (chưa được kiểm tra) để hiểu rõ hơn về điều này
var Schema = require('../model/schema');
Schema.Shop.aggregate([
{ "$unwind": "$products" },
{
"$lookup": {
"from": "products",
"localField": "products",
"foreignField": "_id",
"as": "product"
}
},
{ "$unwind": "$product" },
{ "$unwind": "$product.fruits" },
{
"$lookup": {
"from": "fruits",
"localField": "product.fruits",
"foreignField": "_id",
"as": "fruits"
}
},
{
"$project": {
"nameShop": 1,
"nameProduct": "$product.nameProduct",
"nameFruit": "$fruits.nameFruit",
"price": "$fruits.price",
}
}
]).exec(function (err, result){
if (err) throw err;
console.log(result);
})
TUYÊN BỐ TỪ CHỐI :Trên đây là mã chưa được kiểm tra chỉ đóng vai trò hướng dẫn bằng cách đưa ra một số giả định rằng bạn đang chạy mã trong môi trường thử nghiệm với phiên bản MongoDB và mongoose mới nhất hỗ trợ $lookup
toán tử AND mà bạn có thể thực hiện cùng một truy vấn tổng hợp trong mongo shell.