猫鼬复合独特指数不起作用

时间:2013-09-08 11:07:53

标签: mongodb mongoose

我有以下索引:

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中看到存在两个文件,这些字段相同......

1 个答案:

答案 0 :(得分:0)

解决:我不得不重新启动mongod并删除数据库(可能还是reindex选项也可以。)