Подтвердить что ты не робот

Разница MongoDB между кодом ошибки 11000 и 11001

В соответствии с этим ВЫСОКО незавершенным списком http://www.mongodb.org/about/contributors/error-codes/ они оба связаны с дублирующими ключами. Но я не смог получить ошибку 11001. Все следующие бросили 11000 ошибок:

  • вставка документа с _id, который уже существует
  • вставка документа с повторяющимися полями, в которых поля имеют составной уникальный индекс
  • обновление документа с указанным составным уникальным индексом

Таким образом, это полностью противоречит связанной странице, которая говорит, что 11000 для _id и 11001 будет возникать при обновлениях (не вставляет).

Итак, мой вопрос: когда происходит 11001?

4b9b3361

Ответ 1

Код 11001 не существует в ветки 2.5/2.6 на GitHub, поэтому, если вы пытаетесь использовать версию 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