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

时间:2013-08-03 12:29:42

标签: mongodb

根据此 HIGHLY不完整列表http://www.mongodb.org/about/contributors/error-codes/,它们都与重复键相关。但我无法得到11001错误。所有这些都引发了11000错误:

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

所以这完全反对链接页面,其中11000表示_id,11001表示更新(不是插入)。

所以我的问题是:11001何时发生?

2 个答案:

答案 0 :(得分:28)

GitHub上的2.5 / 2.6分支中不存在代码11001,因此如果您尝试的是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

答案 1 :(得分:1)

Mongo有一个ErrorCategory枚举,它为以下错误代码创建了一个DUPLICATE_KEY_ERROR

private static final List<Integer> DUPLICATE_KEY_ERROR_CODES = Arrays.asList(11000, 11001, 12582);

以上内容来自mongodb Java驱动程序3.6.4。

所以两者都是重复的键。