此代码不起作用,我收到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)
})
有什么想法发生了什么?
答案 0 :(得分:2)
我看到两个可能的问题:
data.score
是唯一的,则您不能拥有两个具有相同值的文档,而其他文档的值可能为50。解决方案是搜索索引并删除您不想要的索引。
{_id: id, 'data.date': date}
的搜索不会返回结果,但不是因为您没有带有该ID的文档,而是因为它没有您搜索的'data.date'字段。然后upsert尝试插入一个新文档(因为搜索没有找到任何'_id'等于id
和'data.date'等于date
的东西)但它没有做到所以(因为你已经有一个'_id'等于id
的文件)。如果您使用_id
,解决方案是仅按upsert
进行搜索。