如何在猫鼬中编写多个查询?

时间:2020-10-05 11:49:57

标签: node.js mongodb mongoose

我已经写了这个查询,但是不正确。

router.get("/product/:name", function(req, res){
Product.findById(req.params.name).populate("reviews").exec(function(err, foundProduct){
    if(err){
        console.log(err);
    }
    else{
        foundProduct.aggregate([{"$lookup": {"from": "reviews", "localField": "reviews", "foreignField": "_id", "as": "reviews"}}, {"$unwind": "$reviews"}, {"$group": {"_id": null, "ratingAvg": {"$avg": "$reviews.rating"}}}], function(err, result){
        if(err){
            console.log(err);
        }
        else{
            result.forEach(function(element){
                var rate = Math.round(element.ratingAvg);
                foundProduct.updateOne({avgRating: rate});
                res.render("product", {product: foundProduct});
            });
        }
    })
    }
})

})

这就是我想要的:

  1. 找到具有该ID的产品
  2. 在与该产品ID相关的产品模型中填充评论
  3. 通过获取与该产品ID相关的所有评分来计算平均评分
  4. 由于产品模型中的默认avgRating为零,因此请使用上一步中计算出的平均评分来更新avgRating。
  5. 现在呈现包含更新的avgRating的foundProduct。

这是产品型号:

var productSchema = new mongoose.Schema({
category: String,
name: String,
price: Number,
image: String,
description: String,
stock: Number,
avgRating: {type: Number, default: 0},
reviews: [
    {
        type: mongoose.Schema.Types.ObjectID, ref: 'Review'
    }
]

})

0 个答案:

没有答案
相关问题