как сохранить новую запись, даже если такая же запись существует со статусом false в уникальной схеме с использованием узла mongoose js - PullRequest
0 голосов
/ 04 апреля 2019

Необходимо сохранить новую запись, даже если одна запись уже существует со статусом false в уникальной схеме с использованием узла mongoose js.У меня есть одна запись вместе с {status:false} путем обновления статуса true на false при удалении этой записи.Теперь я пытаюсь добавить новую запись.но новая запись не написана.потому что я применил unique: true в схеме Мангуста.Мне нужно применить unique: true, но в то же время нужно создать новую запись, если ее статус false для существующего.Так может кто-нибудь дать какое-нибудь предложение

Mongoose, nodejs с mongoose-beautiful-unique-validator

//schema model
     var userSchema = new mongoose.Schema({
          userName: {
         type: String,
         required: true,
         unique: true
     })

 //save user function inside module export function
 const user= mongoose.model('userSchema');
 user.userName = fields.username;
 user.save((err, doc) => {
                 if (!err){
                     res.send(true);
                 } else {
                     console.log(err);

                     return;
                 }

              })

Ожидаемый результат:

  [
   {_id: 12345, userName: 'Uday', status:false},
   {_id: 67894, userName: 'Uday', status:true}
  ]

Фактический результат: я получил дубликатошибка, когда я пытаюсь сохранить имя с Uday со статусом: true

 [
   {_id: 12345, userName: 'Uday', status:false},
 ]

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Если вы хотите дублировать записи для имени пользователя, то вам нужно удалить unique: true из схемы, потому что вы не можете сохранить одно и то же имя пользователя дважды в одних коллекциях.

И если вы просто хотите обновить статус, вы можете использовать запрос на обновление вместо сохранения / вставки.

0 голосов
/ 07 апреля 2019

Удалите атрибут required из вашей схемы, тогда вы можете передать обратный вызов pre('save', callback), который проверяет 2 вещи:

  1. Имя пользователя уже существует (просто проверьте возврат с Model.find({username: usernameToCheck}, callback));
  2. В вашем callback проверьте атрибут status, если он ложный, выведите исключение, иначе сохраните ваш документ.
0 голосов
/ 04 апреля 2019

Ваш идентификатор всегда уникален в mongodb. Без идентичного идентификатора вы можете вставить только данные, но идентичный идентификатор невозможен.

...