Mongoose在数组中查找和更新

时间:2016-09-02 10:11:45

标签: mongodb mongoose

我在mongoose中有以下数据

var query = { _id: mongoose.Types.ObjectId(req.body.id) };

    var update = { $addToSet: { 'voters': req.body.email } };
    var options = { upsert: false, 'new': false };

    Review.findByIdAndUpdate(query, update, options, function (err, doc) {
        if (err) {
            res.json(err);
        }
        res.json({ message: "Thanks :)" });
    });

我正在使用以下查询更新选民阵列

%{NUMBER:consume_time;int}ms

上面的查询工作正常,但我想如果在选民数组中找到电子邮件然后抛出错误消息,如果不是简单地更新选民数组,但$ addToSet没有抛出任何错误消息。

1 个答案:

答案 0 :(得分:0)

$addToSet行为仅确保没有重复项添加到集合中,并且不会影响现有的重复元素。

您可以尝试:使用$nin检查voters中是否存在并使用findOneAndUpdate代替findByIdAndUpdate

var query = { _id: req.body.id ,'voters': {$nin: [req.body.email]}};

var update = { $push: { 'voters': req.body.email } };
var options = { upsert: false, 'new': false };

Review.findOneAndUpdate(query, update, options, function (err, doc) {
  if (err) {
    return res.status(500).send(err);
  }
  if (!doc) {
    return res.status(400).send({msg: 'Already exist voters or not found'});
  }
  return res.status(200).send({ message: "Thanks :)" });
});