29

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

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

所以这完全违背了链接页面,它说 11000 是用于_id更新(而不是插入)时会出现 11001。

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

4

2 回答 2

34

该代码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

于 2013-08-05T15:00:58.847 回答
3

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

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

以上来自mongodb java driver 3.6.4。

所以两者都指重复键。

于 2020-05-12T07:41:54.193 回答