2017-02-06 5 views
0

Я пытаюсь обеспечить уникальность по полю на модели mongoose в существующей базе данных.Уникальные поля в Mongoose

const UserSchema = new mongoose.Schema({ 
    email: { 
    type: String, 
    required: true, 
    unique: true, 
    } 
}) 

Затем, когда я создаю пользователя с электронной почтой, которая уже назначена, она проходит, и у меня есть 2 пользователей с одинаковым адресом.

Я прочитал все связанные ответы SO> 2015 и все о dropDups, which is deprecated.

Я думаю, что я установил эту проблему вручную, запустив

db.users.createIndex({email:1}, {unique:true}) 

Однако это, очевидно, становится громоздким и в развитии и в производстве, особенно с учетом mongoose docs состояния, что атрибут заботится о нем:

unique: boolean, следует ли определять уникальный индекс для этого свойства.

Может ли кто-нибудь предоставить четкое решение для обеспечения уникальности по полю на модели Mongoose, учитывая существующую базу данных и новую коллекцию? Благодаря

+0

Возможного простофилю https://stackoverflow.com/questions/30966146/mongoose-schema-unique-not-being-respected – JohnnyHK

+0

@JohnnyHK Как это возможно? Вы предлагаете, чтобы каждый раз, когда вы хотите добавить коллекцию с уникальными полями, вы должны вручную вызвать 'db.collection.dropIndex ('fieldName_1')'? Не отвечает на мой вопрос вообще – softcode

+0

Часто случается так, что вы не понимаете, что коллекция уже имеет (не уникальный) индекс в поле, поэтому Mongoose не добавляет уникальный указатель, который вы определили. Что показывает 'db.users.getIndexes()'? – JohnnyHK

ответ

1

Два пользователя был создан до уникального индекса был created.So вы можете вставить два пользователя с одинаковыми email.You можно попробовать код ниже, убедитесь, что все индекс был создан:

UserModel.on('index', function(error) { 
    const user1 = new UserModel({ 
    email: '3489' 
    }); 

    const user2 = new UserModel({ 
    email: '3489' 
    }); 
    user1.save(console.log); 
    user2 .save(console.log); 
});