我有以下索引:
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 + year + month)的新文档。这很奇怪,因为我在这三个字段(driver_id + year + month)上声明了唯一索引,我可以在mongoshell中看到存在两个文件,这些字段相同......
答案 0 :(得分:0)
解决:我不得不重新启动mongod
并删除数据库(可能还是reindex选项也可以。)