как исправить дубликат ключа ошибок сбора друзей - PullRequest
1 голос
/ 10 марта 2019

Я получаю следующую ошибку:

E11000 duplicate key error collection: db.users index: friends.userid_1 dup key: { : null }

Я не знаю, как это исправить. по умолчанию ничего нет, но когда я ввожу новый идентификатор пользователя с пустым значением friends, я все равно получаю сообщение об ошибке. почему?

в схеме пользователя:

   friends : [
        {
            userid : {type: String, default: '', index: { unique: true }},
        }
    ],
    friendRequests: [
        {
            userid : {type: String, default: '', index: { unique: true }},
        }
    ]

1 Ответ

1 голос
/ 10 марта 2019

В соответствии с официальной документацией Mongoose :

Массивы являются особыми, поскольку неявно имеют значение по умолчанию [] (пустой массив).

Вот почему он неявно индексирует значение null, когда вы ничего не вводите в friends.Чтобы исправить это, вы можете явно определить значение default для обоих массивов как undefined и создать свой индекс как разреженный , чтобы исключить пустые значения из ограничения unique, попробуйте:

friends : {
    type: [ { userid : {type: String, default: '', index: { unique: true, sparse: true } } } ],
    default: undefined
},
friendRequests: {
    type: [ { userid : {type: String, default: '', index: { unique: true, sparse: true } } } ],
    default: undefined
}

РЕДАКТИРОВАТЬ: пожалуйста, убедитесь, что mongoose перестраивает ваши индексы перед тестированием

...