mongodb中id的重复键

时间:2016-12-30 17:28:20

标签: javascript node.js mongodb express mongoose

此代码不起作用,我收到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)
        })

有什么想法发生了什么?

1 个答案:

答案 0 :(得分:2)

我看到两个可能的问题:

  1. 您可能已将某些字段设置为唯一,并且Mongo为该字段创建了索引。例如,如果data.score是唯一的,则您不能拥有两个具有相同值的文档,而其他文档的值可能为50。
  2. 解决方案是搜索索引并删除您不想要的索引。

    1. 也许您对{_id: id, 'data.date': date}的搜索不会返回结果,但不是因为您没有带有该ID的文档,而是因为它没有您搜索的'data.date'字段。然后upsert尝试插入一个新文档(因为搜索没有找到任何'_id'等于id和'data.date'等于date的东西)但它没有做到所以(因为你已经有一个'_id'等于id的文件)。
    2. 如果您使用_id,解决方案是仅按upsert进行搜索。