根据这个高度不完整的列表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

    10-06 03:50