2016-12-30 72 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