Как показать определенные столбцы в mongodb? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть две коллекции (рекламные акции, продукт) и карта коллекции продуктов для рекламных акций, все работает нормально. Но я сомневаюсь, как отобразить определенные столбцы в коллекции продуктов.

рекламная коллекция

{ 
    "_id" : ObjectId("5cf7679a0b0bed2e7483b998"),   
    "group_name" : "Latest",   
    "products" : 
   [ObjectId("5cecc161e8c1e73478956333"),ObjectId("5cecc161e8c1e73478956334")]
}  

продукт коллекция

{ 
    "_id" : ObjectId("5cecc161e8c1e73478956333"), 
    "product_name" : "bourbon"
},
{ 
    "_id" : ObjectId("5cecc161e8c1e73478956334"), 
    "product_name" : "bour"
}

запрос сопоставления

db.promotional.aggregate(
     [
        {
           $lookup: {
             from: "product",
             localField: "products",
             foreignField: "_id",
             as: "products"
                   }
        }
     ]
)  

Я пытался сопоставить коллекцию товаров с рекламной коллекцией

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

{ 
    "_id" : ObjectId("5cf7679a0b0bed2e7483b998"),   
    "group_name" : "Latest",   
    "products" : 
     [
       { 
         "_id" : ObjectId("5cecc161e8c1e73478956333"), 
         "product_name" : "bourbon"
       },
       { 
       "_id" : ObjectId("5cecc161e8c1e73478956334"), 
       "product_name" : "bour"
       }
     ]
}

Ожидаемый результат

{ 
    "_id" : ObjectId("5cf7679a0b0bed2e7483b998"),   
    "group_name" : "Latest",   
    "products" : 
     [
       {  
         "product_name" : "bourbon"
       },
       {  
       "product_name" : "bour"
       }
     ]
}

Ответы [ 3 ]

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

Вы можете исключить эти столбцы, используя оператор $ project :

db.promotional.aggregate(
    [
        {
        $lookup: {
                from: "product",
                localField: "products",
                foreignField: "_id",
                as: "products"
            }
        },
        {
            $project: {
                "products._id": 0
            }
        }
    ]
) 
0 голосов
/ 06 июня 2019
db.getCollection("promotional").aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path: "$products"

            }
        },

        // Stage 2
        {
            $lookup: {
                from: "product",
                localField: "products",
                foreignField: "_id",
                as: "products"
            }
        },

        // Stage 3
        {
            $group: {
                _id: {
                    _id: '$_id',
                    group_name: '$group_name'
                },
                products: {
                    $push: {
                        product_name: {
                            $arrayElemAt: ["$products.product_name", 0]
                        }
                    }
                }
            }
        },

        // Stage 4
        {
            $project: {
                _id: '$_id._id',
                group_name: '$_id.group_name',
                products: 1
            }
        },

    ]



);
0 голосов
/ 06 июня 2019
db.promotional.aggregate([
{
                    $lookup: {
                        from: "product",
                        localField: "products",
                        foreignField: "_id",
                        as: "products"
                    }
                },{$project :{products :{product_name : 1}}}
])
...