Ошибка дублированного ключа mongoose с пустой строкой

1

У меня есть такая схема:

const MemberSchema = mongoose.Schema({
  name: {
    type: String,
  },
  email: {
    type: String,
    unique: true
  },
  phone: {
    type: String,
    unique: true
  }
})

и, конечно, электронная почта и телефон должны быть уникальными, но электронная почта или телефон необязательны, поэтому они могут быть пустой строкой.

и когда вы устанавливаете их как уникальный индекс, я получаю эту ошибку

E11000 duplicate key error collection: model.members index: email_1 dup key: { : "" }'

Есть ли способ добавить исключение к уникальному?

редактировать

Я изменил свой код, как показано ниже, но все еще не работает.

email: {
    type: String,
    trim: true, index: true, unique: true, sparse: true
  },

\

'E11000 duplicate key error collection: email-collector.members index: email_1 dup key:{ : null }'

когда я запускаю getIndexes, я получаю

> db.members.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "email-collector.members"
        },
        {
                "v" : 2,
                "unique" : true,
                "key" : {
                        "email" : 1
                },
                "name" : "email_1",
                "ns" : "email-collector.members",
                "sparse" : true,
                "background" : true
        },
        {
                "v" : 2,
                "unique" : true,
                "key" : {
                        "email" : 1,
                        "phone" : 1
                },
                "name" : "email_1_phone_1",
                "ns" : "email-collector.members",
                "sparse" : true
        }
]
  • 0
    Возможный дубликат mongoDB / mongoose: уникальный, если не нулевой
  • 0
    @madalinivascu в этом случае, его пустая строка не нулевая, поэтому я думаю, что это не работает ..?
Теги:
mongoose
mongodb-query
mongoose-schema

1 ответ

0

Вам нужно использовать sparse unique index

Members.index({ email: 1, phone: 1 }, { unique: true, sparse: true })

Ещё вопросы

Сообщество Overcoder
Наверх
Меню