簡體   English   中英

Mongoose 填充值並修改對象

[英]Mongoose Populate values and modifying the Object

我正在嘗試使用貓鼬填充查找結果。 但我面臨一個問題。

我的數據是一個產品列表,每個產品都包含一個變體列表。 假設我有一個名為 Phone 的產品,並且有一個名為 blue、black 和 green 的變體列表。 我想要做的是返回完整的產品列表和庫存總和。

產品對象的一個​​例子是:

{
 "name" : "Phone",
 "details" : "blaah blaah",
 "variants" : [
               ObjectId("5e22d3dabb6cc53debc3a4ae"), 
               ObjectId("5e23629c82aac939fe95c926") 
              ]
}

變體對象的一個​​例子是

 [
  {
   "name" : "blue",
   "stocks": 14,
   "cost" : 200
  },
  {
   "name" : "black",
   "stocks": 9,
   "cost" : 202
  }
 ]

目前我正在做以下事情

router.get("/fetchProducts", (req, res) => {
    Product.find({}).populate("variants")
        .then(products => {
            res.send(products);
        }).catch(err => {
            res.send(err)
        })
})

但我想添加所有變體的股票並將其附加到結果中。 像這樣

{
 "name" : "Phone",
 "details" : "blaah blaah",
 "variants" : [
               {
                "name" : "blue",
                "stocks": 14,
                "cost" : 200
               },
               {
                "name" : "black",
                "stocks": 9,
                "cost" : 202
                } 
              ],
 "stocks": 23
}

您可以使用帶有$reduce運算符的聚合管道,但在此之前您必須填充文檔,您可以使用類似於 populate 的$lookup來完成此操作。這是您的數據示例。 我還沒有測試過,但我希望它有效。

Product.aggregate([{
     $lookup: {
        from: "variants",
        localField: "variant",
        foreignField: "_id",
        as:"variant"
      }

}, {
        "$addFields": {
            "stocks": {
                "$reduce": {
                    "input": "$variants",
                    "initialValue": 0,
                    "in": { "$add" : ["$$value", "$$this.cost"] }
                }
            }
        }
    }
]).exec(function(err, data) {
    if(err) console.log(err)
    console.log(data)

})

暫無
暫無

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

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