2016-12-30 36 views
0

此代码不起作用,我得到了E11000 duplicate key error index error的错误。mongodb中id的重复密钥

Student.update({_id: id, 'data.date':date}, {'$set': {'data.score': 50}}, {upsert: true}, 
    function(err,result) { 
     res.json(1); 
    }); 

我不知道如何解决这个问题时,我可以做

Student.findOne({_id: id}, function(err,result){ 
      res.json(result) 
     }) 

任何线索是怎么回事?

+0

Did [我的回答](https://stackoverflow.com/questions/41400195/duplicated-key-of-id-in-mongodb/41400670#41400670)下面有帮助吗?如果是这样,那么你可以考虑[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。 – rsp

回答

2

我看到了两个可能的问题:

  1. 你可能已经设置了一些领域的独特和蒙戈创造了该领域的指数。例如,如果data.score将是唯一的,那么你可以不具有相同值的两个文件,也许其他文件已经有50

值的解决办法是搜索索引和删除那些你不想要。

  1. 也许您对{_id: id, 'data.date': date}的搜索没有返回结果,但并不是因为您没有具有该id的文档,而是因为它没有那个'data.date '搜索的字段。然后upsert尝试插入一个新文档(因为搜索没有发现任何'_id'等于id和'data.date'等于date)但它没有这样做(因为你已经有一个文档'_id'等于id)。

如果您使用的是upsert,则解决方案将仅搜索_id