Как отобразить три коллекции с помощью mongodb - PullRequest
0 голосов
/ 24 июня 2019

Я попытался отобразить три коллекции, используя mongodb. Я завершил две коллекции, но другую коллекцию, которую я не могу сопоставить, как это сделать, приведите пример кода.

group_promotion

[{

"id":1,
"group_name":"latest",  
 products:[6,7,8]

}]

продукт

[{

"id":6,  
"produc_namme":"bourbon",
"category_id": 20

}]

Категория

[{

"id":20,
"category_name":"beer"

}]

Код карты

db.group_promoton.aggregate([{$lookup :  
{  
from:"product",  
localfield:"products",  
foreignField:'id',  
as:products  
}}])

Я получил вывод

[{

"id":1,
"group_name":"latest",  
 products:[{
"id":6,  
"produc_namme":"bourbon",
"category_id": 20
}]

}]

Исключенный выход

[{

"id":1,  
"group_name":"latest",    
 products:[{  
"id":6,    
"produc_namme":"bourbon",  
"category_nmae":"beer"  
}]

}]

1 Ответ

1 голос
/ 24 июня 2019

Здесь попробуйте следующий запрос:

db.getCollection("group_promotion").aggregate([
{
    $lookup: {
        from: "product",
        localField: "products",
        foreignField: "id",
        as: "products"
    }
},
{ $unwind: "$products" },
{
    $lookup: {
        from: "Category",
        localField: "products.category_id",
        foreignField: "id",
        as: "category"
    }
},
{ $unwind: "$category" },
{
    $group: {
        _id: '$id', "group_name": { $first: "$group_name" }, "products": {
            $push: {
                "id": "$products.id", "produc_namme": "$products.produc_namme", "category_nmae": "$category.category_name"
            }
        }
    }
}
])

Примечание:

  • Вы всегда можете использовать $lookup в свойстве dotted массива (, как описано в приведенном выше запросе для Category collection ).
  • Здесь я использую $ unwind , чтобы деконструировать массивы ( т.е. продукты и категории ), а затем группировать их для создания результата. Я использовал $ first , чтобы удовлетворить правила $ group groups и отобразить первое значение.
...