MongoDB 错误代码 11000 和 11001 之间的区别

标签 mongodb

根据这个非常不完整列表http://www.mongodb.org/about/contributors/error-codes/它们都与重复键有关。但我无法得到 11001 错误。以下所有都抛出了 11000 错误:

  • 插入具有 _id 已存在的文档
  • 插入具有重复字段且字段具有复合唯一索引的文档
  • 使用所述复合唯一索引更新文档

所以这完全违背了链接页面,它说 11000 用于 _id 并且 11001 将发生在更新(而不是插入)时。

所以我的问题是:11001 什么时候出现?

最佳答案

代码 11001 在 GitHub 上的 2.5/2.6 分支中不存在,因此如果您尝试 2.5 版本,则无法创建它。我确实看过代码,但我找不到任何直接显示 11001 代码的路径。

以下几行将显示代码11001:

db.so.drop();
db.so.insert( { foo: 5 } );
db.so.ensureIndex( { foo: 1 }, { unique: true } );
db.so.insert( { foo: 6 } );

预期的11000:

db.so.insert( { foo: 5 } );
E11000 duplicate key error index: test.so.$foo_1  dup key: { : 5.0 }

现在到达11001:

db.so.insert( { foo: 6 } );
db.so.update( { foo: 6 }, { $set: { foo: 5 } } );
E11000 duplicate key error index: test.so.$foo_1  dup key: { : 5.0 }

还是原来的11000,但是:

db.getPrevError();
{
    "err" : "E11000 duplicate key error index: test.so.$foo_1  dup key: { : 5.0 }",
    "code" : 11001,
    "n" : 0,
    "nPrev" : 1,
    "ok" : 1
}

原始文本错误消息显示 E11000 是一个错误:https://jira.mongodb.org/browse/SERVER-5978

关于MongoDB 错误代码 11000 和 11001 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18032879/

相关文章:

node.js - 查询 Mongoose 子数组中的对象

javascript - 使用 mongodb 触发器

mongodb - 如何在mongodb中取消设置后删除值为null的数组字段

mongodb - 编写集合模式以映射另一个集合的最佳方式是什么?

javascript - 如何自动创建 REST API node.js/MongoDB

MONGODB 无法与 DB Mongo::Error::SocketError 握手:EOFError:到达文件结尾(TLS)

mongodb - 从另一个集合中删除 dbref 元素

ruby-on-rails - window : rails: error installing bson_ext

java - 如何在 Morphia/MongoDB Java 中创建复合唯一索引?

ruby-on-rails - 在 mongo ruby​​ 驱动程序中使用 DBRef:(#<Mongo::DBRef:0x0056466ed55e48> 的未定义方法 `bson_type')