Mongodb mongoose compund唯一索引不起作用

Mongodb mongoose compund唯一索引不起作用,mongodb,mongoose,Mongodb,Mongoose,我有以下索引: PaymentSchema.index({ driver_id: 1, year: 1, month: 1 },{ unique: true }); 因此,我希望此集合仅为每个不同的字段组合保存一条记录driver\u id,year和month。我想使用upsert选项更新集合: var query = { driver_id: req.params.driver_id, year: req.params.year, m

我有以下索引:

PaymentSchema.index({ driver_id: 1, year: 1, month: 1 },{ unique: true });
因此,我希望此集合仅为每个不同的字段组合保存一条记录
driver\u id,year和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({});
    });

所以我想用给定的唯一键(驱动程序id+年+月)和附加条件
amount=…
更新文档。若查询条件是确定的,那个么应该更新文档—并且它可以工作。如果未根据此条件找到文档,并且具有唯一索引的文档不存在,则会创建该文档。但如果存在具有唯一索引的文档(只有金额条件不正确),则将在中创建具有相同唯一索引(驱动程序id+年+月)的新文档。这很奇怪,因为我在这3个字段(driver_id+year+month)上声明了唯一索引,并且我可以在mongoshell中看到存在两个具有相同字段的文档

已解决:我必须重新启动
mongod
并删除数据库(可能reindex选项也会起作用)。

您能否将
getindex
的问题输出添加到您的问题中: