这段代码无法正常工作,出现了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
搜索。