0

我有以下索引:

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 中看到存在两个具有相同字段的文档......

4

1 回答 1

0

已解决:我必须重新启动mongod并删除数据库(可能重新索引选项也可以)。

于 2013-09-08T12:34:21.237 回答