使用聚合后无法调用.save()

时间:2019-01-31 15:29:03

标签: node.js mongodb mongoose

我必须使用聚合在对象数组中查找用户ID,一旦有了它,我想使用该ID更新文档。但是,当我尝试像使用Product.findById(productId)之后那样调用.save()时,会出现一个错误,仅在使用聚合时才会发生。

  

product.save不是函数

exports.putGift = (req, res, next) => {
  const productId = req.body.productId;
  const requestId = req.body.requestId;
  Product.aggregate([
    { $match: { _id: mongoose.Types.ObjectId(productId) } },
    { $unwind: "$requests" },
    { $match: { "requests._id": mongoose.Types.ObjectId(requestId) } },
    { $project: { "requests.userId": 1 } }
  ])
    .then(product => {
      const userId = product[0].requests.userId;
      product.winner = userId;
      product.status = "given";
      return product.save()
      .then(result => {
        console.log("success");
      });
    })
    .catch(err => {
      console.log(err);
    });
};

1 个答案:

答案 0 :(得分:1)

您不能合计使用.save。您将需要使用.update()方法来更新文档。

使用方式:

Product.update({_id: 'someid'}, { $set: { winner: 'somevalue', status: 'somevalue' } });