这段代码无法正常工作,出现了E11000 duplicate key error index error错误。

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)
        })


有什么线索吗?

最佳答案

我看到两个可能的问题:


您可能已将某些字段设置为唯一字段,而Mongo为该字段创建了索引。例如,如果data.score是唯一的,则您不能有两个具有相同值的文档,也许其他文档已经具有值50。


解决方案是搜索索引,然后删除不需要的索引。


也许搜索{_id: id, 'data.date': date}不会返回结果,但不是因为您没有具有该ID的文档,而是因为它没有要搜索的'data.date'字段。然后upsert尝试插入一个新文档(因为搜索未找到'_id'等于id且'data.date'都等于date的任何东西),但是却没有这样做(因为您已经有一个'_id'等于id的文档)。


解决方案是,如果使用_id,则仅按upsert搜索。

09-30 17:59
查看更多