错误代码11000和11001之间的MongoDB差异

错误代码11000和11001之间的MongoDB差异,mongodb,Mongodb,根据这个高度不完整的列表,它们都与重复的密钥有关。但我没能得到11001的错误。以下所有操作都引发了11000错误: 插入具有已存在的\u id的文档 插入具有重复字段且字段具有复合唯一索引的文档 使用所述复合唯一索引更新文档 因此,这与链接页面完全相反,链接页面上说11000代表\u id,11001将在更新时出现(不是插入) 所以我的问题是:11001是什么时候出现的?代码11001不存在于GitHub上的2.5/2.6分支中,因此如果您尝试的是2.5版本,则无法创建它。我确实看过代码,

根据这个高度不完整的列表,它们都与重复的密钥有关。但我没能得到11001的错误。以下所有操作都引发了11000错误:

  • 插入具有已存在的
    \u id
    的文档
  • 插入具有重复字段且字段具有复合唯一索引的文档
  • 使用所述复合唯一索引更新文档
因此,这与链接页面完全相反,链接页面上说11000代表
\u 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 } );
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.so.insert( { foo: 5 } );
E11000 duplicate key error index: test.so.$foo_1  dup key: { : 5.0 }
现在进入
11001

db.so.drop();
db.so.insert( { foo: 5 } );
db.so.ensureIndex( { foo: 1 }, { unique: true } );
db.so.insert( { foo: 6 } );
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是一个错误:

Mongo有一个
错误类别
枚举,它为以下错误代码创建了一个
重复的密钥错误

private static final List<Integer> DUPLICATE_KEY_ERROR_CODES = Arrays.asList(11000, 11001, 12582);
private static final List DUPLICATE\u KEY\u ERROR\u code=Arrays.asList(11000112582);
以上内容来自mongodb java驱动程序3.6.4


所以两者都指重复的钥匙。

哇,谢谢。我使用的是2.4.5,事实上错误的只是错误消息(我没有使用
getpreveror
)。您在源代码中找不到任何
11001
,这是否意味着他们会在2.4之后删除它?你知道这方面的任何来源(例如问题)吗?不,我找不到这方面的问题,但我在服务器5978问题上留下了评论。谢谢你的研究。我将继续检查我的客户端代码中的
11000
11001
。根据这个答案,我推断11000和11001之间的区别在于它们分别用于插入和更新?或者这纯粹是服务器版本的差异?为什么服务器会针对这些情况发出不同的错误代码?检查这两种错误的最佳方法是什么。类似于
(error.code&~1)==11000
?我在上找不到error
11001
,并且该链接已断开。这个问题是针对mongo版本的吗?