我有以下索引:
PaymentSchema.index({ driver_id: 1, year: 1, month: 1 },{ unique: true });
所以我希望这个集合只为每个不同的字段组合保存一个记录driver_id, year and month
。我想用upsert
选项更新集合:
var query = {
driver_id: req.params.driver_id,
year: req.params.year,
month: req.params.month,
amount: req.params.old_value
};
var update = {
$set: {
amount: req.params.new_value
}
};
var options = {
upsert: true
};
Payment.update(query,update,options,function(err,rows){
if(err) return next(err);
res.json({});
});
所以我想要的是使用给定的唯一键(driver_id+year+month)和附加条件更新文档amount = ...
。如果查询条件正常,则应更新文档 - 它可以工作。如果根据此条件未找到文档并且具有唯一索引的文档不存在,则创建该文档。但是,如果存在具有唯一索引的文档(仅数量条件不正确),则使用相同的唯一索引(driver_id + 年 + 月)创建一个新文档。这很奇怪,因为我在这 3 个字段(driver_id+year+month)上声明了唯一索引,我可以在 mongoshell 中看到存在两个具有相同字段的文档......