簡體   English   中英

Mongodb:在 $lookup 聚合后添加新字段

[英]Mongodb : add new field after $lookup aggregate

我想將isFavorite添加為真/假,如果用戶將該組合標記為最喜歡的。"isFavorite" : 0 表示用戶已經將該項目標記為最喜歡的。我的查詢是

db.getCollection('itemorders').aggregate([
  { "$match": {"customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"), 'isCart': 0}},
  { "$lookup": {
        "from": "itemlistorders",
        "let": { "cartId": { "$toObjectId" : "$_id" }},
        "pipeline": [
                { "$match": { "$expr": { "$eq": ["$cartId", "$$cartId"] }}},
                ],
        "as": "itemOrdered"
            } },
  {$unwind: { path: "$itemOrdered", preserveNullAndEmptyArrays: true }},
  { "$lookup": {
                "from": "favoritedrinks",
                "let": { "uniqueCartKey": "$itemOrdered.uniqueCartKey" },
                "pipeline": [
                        { "$match": { "$expr": { "$eq": ["$uniqueFavKey", "$$uniqueCartKey"] }}},
                        { "$addFields": { "isFavorite": true }}
                ],
                "as": "mixerList"
            } },
                            {$unwind: { path: "$itemOrdered", preserveNullAndEmptyArrays: true }},
                            {
                "$group": {
                    "_id": "$_id",
                    "grantTotal" : { "$first": "$grantTotal" },
                    "customerName" :  { "$first": "$customerName" }, 
                    "barName" : { "$first": "$barName" },
                    "itemOrdered": { "$addToSet": "$itemOrdered" },
                }
            },{
                $project: {
                    '_id': 1, 
                    'grantTotal': 1, 
                    'customerName': 1, 
                    'barName': 1,
                    'itemOrdered': 1,
                }
            },
  ]);

排除此之后我的輸出是:

 {
"_id" : ObjectId("5e8224768910e83e908d0108"),
"itemOrdered" : [ 
    {
        "_id" : ObjectId("5e82257250c82e1abc16d856"),
        "barId" : ObjectId("5e55f60eff2f842de4ae6184"),
        "customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"),
        "isCart" : 0,
        "isAlcoholActive" : 1,
        "alcoholId" : "5e81d13e50c82e1abc0a1ebb",
        "alcoholName" : "Irish Coffee",
        "cartId" : ObjectId("5e8224768910e83e908d0108"),
        "itemTotal" : 250,
        "noofDrinks" : 2
    },  
    {
        "_id" : ObjectId("5e8224e88910e83e908d0110"),
        "isCart" : 0,
        "isAlcoholActive" : 1,
        "isFavorite" : 0,
        "customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"),
        "barId" : ObjectId("5e55f60eff2f842de4ae6184"),
        "noofDrinks" : 1,
        "itemTotal" : 200,
        "mixerList" : [ 
            {
                "isMixerActive" : 0,
                "_id" : ObjectId("5e8224e88910e83e908d0111"),
                "mixerId" : "5e820b0250c82e1abc12cffc",
                "mixerName" : "Pineapple juice"
            }
        ],
        "alcoholId" : "5e81d17150c82e1abc0a2607",
        "alcoholName" : "Fireball",
        "cartId" : ObjectId("5e8224768910e83e908d0108"),
    }
]
};

我想在每個子文檔中添加isFavorite ,以便我可以確定用戶是否喜歡這個項目。

下面的查詢適用於我的場景。

 db.getCollection('itemorders').aggregate([
 { "$match": {"customerId" : ObjectId("5e78a07c0ce36c23dcf85e6a"), 'isCart': 0}},
 { "$lookup": {
        "from": "itemlistorders",
        "let": { "cartId": { "$toObjectId" : "$_id" }},
        "pipeline": [
                { "$match": { "$expr": { "$eq": ["$cartId", "$$cartId"] }}},
                ],
        "as": "itemOrdered"
            } },
   {$unwind: { path: "$itemOrdered", preserveNullAndEmptyArrays: true }},
   { "$lookup": {
                "from": "favoritedrinks",
                "let": { "uniqueCartKey": "$itemOrdered.uniqueCartKey","customerId1": "$itemOrdered.customerId", "modifierfavId": "$itemOrdered._id" },

                pipeline: [
            {
               $match: {
                  $expr: {
                     $and: [
                        {
                           $eq: [
                              "$uniqueFavKey", "$$uniqueCartKey"
                           ]
                        },
                        {
                           $eq: [
                              "$customerId",
                              "$$customerId1"
                           ]
                        }
                     ]
                  }
               }
            },{ "$addFields": { "isFavorite": 'true' }}
         ],
                "as": "itemListOrdered"
            } }, 
                            { "$addFields": { "itemOrdered.isFavorite": { "$gt": ["$itemOrdered.isFavorite", null] } }},
                            {
                "$group": {
                    "_id": "$_id",
                    "grantTotal" : { "$first": "$grantTotal" },
                    "customerName" :  { "$first": "$customerName" }, 
                    "barName" : { "$first": "$barName" },
                    "orderDate" : { "$first": "$orderDate" },
                    "itemOrdered": { "$push": "$itemOrdered" },
                }
            }

   ])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM