MongoDB множественные регистрозависимые поля уникальный индекс, сообщение об ошибке не имеет смысла - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть коллекция с индексом ниже.Только имя имеет тип string, и проверка должна выполняться без учета регистра.Допускается только «A» или «a»

db.collection('myCollection').createIndex(
          { "name": 1, "type": 1, "ref": 1 }, { unique: true, collation: { locale: 'en', strength: 1 }});
      })
    }

Я протестировал, и это работает, но я не понимаю сообщение об ошибке:

{
    "errorMessage": "E11000 duplicate key error collection: my.myCollection index: name_1_type_1_ref_1 dup key: { : \"O1XO\u0006\u000c)MN11\", : \")MB1O1FG1\", : null }"
}

Что означает часть ключа dup?Это правильный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

@ AlexBlex указал в комментариях, что это ошибка: https://jira.mongodb.org/browse/SERVER-26050

0 голосов
/ 03 мая 2019

Последнее обнаружение

Я обнаружил, что у меня будет такое же сообщение об ошибке, если в моей существующей коллекции уже есть какой-либо документ, который потерпел крах при создании индекса .Пожалуйста, подтвердите, что у вас нет недействительного документа перед созданием составного индекса.


Я столкнулся с той же проблемой, когда не указал правильное имя индекса в параметрах параметров.MongoDB не позволяет нам создавать с дублирующимся индексным ключом, но будет использовать соответствующие поля и соответствующее значение для создания имени индекса (в данном случае это name_1_type_1_ref_1).Следовательно, нам нужно добавить суффикс имени с '_en' или, возможно, другой суффикс, чтобы избежать повторяющейся ошибки, например, следующей.

db.collection('myCollection').createIndex(
      { "name": 1, "type": 1, "ref": 1 }, 
      { name: "name_1_type_1_ref_1_en", 
        unique: true, 
        collation: { locale: 'en', strength: 1 }
      }
);

, тогда составной индекс может быть успешно создан.

0 голосов
/ 27 сентября 2018

Какая у вас версия сервера mongodb?Я пытаюсь mongodb 4.0 его работы;

 //mongodb version 4.0

db.createCollection("TestIndex");

db.getCollection('TestIndex').createIndex(
{ "name": 1, "type": 1, "ref": 1 }, { unique: true, collation: { locale: 'en', strength: 2 }});

db.getCollection('TestIndex').insert({ "name" : "A",
    "type" : "B",
    "ref" : "C"});

db.getCollection('TestIndex').insert({ "name" : "A",
    "type" : "B",
    "ref" : "c"});
//E11000 duplicate key error collection: test_db.TestIndex index: name_1_type_1_ref_1 dup key: { : ")", : "+", : "-" }

db.getCollection('TestIndex').drop();

db.createCollection("TestIndex");
db.getCollection('TestIndex').createIndex(
{ "name": 1, "type": 1, "ref": 1 }, { unique: true, collation: { locale: 'en', strength: 3 }});

db.getCollection('TestIndex').insert({ "name" : "A",
    "type" : "B",
    "ref" : "C"});
    //Inserted 1 record(s) in 11ms
db.getCollection('TestIndex').insert({ "name" : "A",
    "type" : "B",
    "ref" : "c"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...