Переключить логическое значение с mongoDB - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю с базой данных mongoDB и хочу переключить атрибут логического представления внутри объекта Day. Вот мой рабочий код:

exports.modifyPresence = (req, res) => {
  action.getStudentCurrentDay(req.body.hash)
  .then(
    dayId => {
      return Day.findOne({_id: dayId});
    }
  )
  .then(
    day => {
      return Day.findOneAndUpdate({_id: day.id},{$set:{present:!day.present}});
    }
  )
  .then(
    () => res.status(200).json("This is a success")
  )
  .catch(
    (error) => res.status(500).json({error})
  )
}

Он работает, но я бы с удовольствием однажды позвонил бы моей БД и написал что-то вроде этого:

exports.modifyPresence = (req, res) => {
  action.getStudentCurrentDay(req.body.hash)
  .then(
    dayId => {
      return Day.findOneAndUpdate({_id: day.id},{$set:{present:!present}});
    }
  )
  .then(
    () => res.status(200).json("This is a success")
  )
  .catch(
    (error) => res.status(500).json({error})
  )
}

Кто-нибудь знает, как реализовать один вызвать базу данных и элегантно переключить мой логический тип? Я понятия не имею, как упростить мой код.

Спасибо всем

Eelke

1 Ответ

1 голос
/ 09 апреля 2020

Если вы используете MongoDB 4.2, вы можете использовать операторы агрегации в своем операторе обновления, например:

.findOneAndUpdate({_id: day.id},[{$set:{present:{$eq:[false,"$present"]}}}]);

Это установит present в true, если оно ложно, и в false, если оно есть. любое другое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...