我在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没有抛出任何错误消息。
答案 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 :)" });
});