@VegasChickiChicki

Как запушить в массив модели объект, только если его там нет?

Есть вот такая вот схема:
const chat = new schema({
  name: {
    type: String,
    required: true,
    unique: true,
  },
  users: [{
    name: {
      type: String,
      required: true,
      unique: true,
    }
  }],
  messages: [{
    user: {
      type: String,
      required: true,
    },
    message: {
      type: String,
      required: true,
    },
    date: {
      type: String,
      required: true,
    }
  }]
}, {
  versionKey: false,
  collation: 'chat'
});


Есть запрос, пользователь ищет чаты, если он их находит, то он может к ним присоединиться(к 1 за раз(за запрос)).

Выглядит это примерно так:
router.post('/join', async (request, response) => {
  models.chat.findOneAndUpdate({
    name: request.body.data.chat.name
  }, {
    $push: {
      users: {
        name: request.body.data.user.name,
      }
    }
  }, {
    new: true,
    upsert: true,
  }, (error, chat) => {
    if (!error){
      response.json({
        status: true,
        body: {
          chat
        },
      });

      //console.log('Chat update! chat: ', chat);
    } else {
      //console.log('error: ', error);
    }
  });
});


Не могу понять, могу ли я как то указать, что если в массиве users уже есть объект с именем, которое приходит в запросе, то ничего делать не нужно?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
Меняем $push на $addToSet и вуаля ))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы