MongoError: E11000 коллекция повторяющихся ошибок ключа для уникального составного индекса, включая ObjectId - PullRequest
0 голосов
/ 27 апреля 2018

Схема индекса индекса и индекс:

const schema: Mongoose.SchemaDefinition = {
  field_name: { type: String, required: true },
  mask: { type: String, required: true },
  value: { type: String, required: true },
  register: { type: Mongoose.Schema.Types.ObjectId, ref: 'register' }
};

const indexFields = {
  field_name: 1,
  mask: 1,
  regsiter: 1,
  value: 1
};

export const RegisterFieldsSchema = new Mongoose
  .Schema(schema, { timestamps: true })
  .index(indexFields, {unique: true});

И в коллекции уже есть записи с такими же field, mask и value, как у следующей записи, но ни одна запись не содержит такой же register.

Когда я пытаюсь вставить документ:

db.getCollection('registerfields')
.insert({
    "field_name":"ARM_SMMU_CBn_PMEVTYPER2_0_NSU",
    "mask":"0x10000000",
    "register":ObjectId("5ae2639ffc61a6c8dbb332a5"),
    "value":"0x00000000",
});

база данных возвращает:

grdb-dev.registerfields index: 
field_name_1_mask_1_regsiter_1_value_1 dup key: 
{
    : "ARM_SMMU_CBn_PMEVTYPER2_0_NSU", 
    : "0x10000000", 
    : null, 
    : "0x00000000"
}

Согласно нескольким другим ответам, это может быть вызвано тем, что в коллекции уже отсутствует свойство register. Поэтому я проверил, так ли это:

db.getCollection('registerfields')
    .find({"register":  {$exists: false}})

результат: Fetched 0 record(s) in 6ms

Я также запускаю приведенный выше запрос, чтобы проверить, содержат ли все документы field_name, mask и value. Получил 0 записей за все

Кто-нибудь знает, почему дубликат ключа имеет значение null для регистра?

1 Ответ

0 голосов
/ 30 апреля 2018

MongoDB обрабатывает ObjectId на составном ключе как ноль. Не могу найти документ об этой проблеме, но это результат моих тестов на MongoDB 3.4.8.

Возможно, частичное решение заключается в использовании частичного индекса в поле, в котором можно использовать ObjectID или сохранить строку вместо ObjectId объекта.

Ссылка: Частичный индекс

...