Как обновить вложенные объекты - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу использовать метод $ push для помещения объекта во вложенный массив. Но я не могу заставить его работать, так что вы можете динамически получить нужный объект внутри массива. Позвольте мне объяснить лучше, показывая код.

Это моя схема:

var StartedRaceSchema = new mongoose.Schema({
    waypoints: {
        type: Object,
        name: String,
        check_ins: {
            type: Object,
            user: {
                type: Object,
                ref: 'User'
            }
        }
    }
});

Когда вы регистрируетесь на путевой точке, она должна быть вставлена ​​в правильные путевые точки, вложенные Check_ins

Это код для обновления:

StartedRace.findByIdAndUpdate(req.params.id,
        { $push: { 'waypoints.1.check_ins': req.body.user } },
        function (error) {
            if (error) {
                console.log(error)
                res.send({
                    success: false,
                    error: error
                })
            } else {
                res.send({
                    success: true
                })
            }
        }
    )

Как видите, я могу заставить его работать только с такими полями, как:

'waypoints.1.check_ins'

Это 1 должно быть динамически, потому что оно отправляется в пределах параметров. Но я не могу заставить его работать динамически, только жестко закодировано.

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

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

Вы можете попробовать этот синтаксис вместо точечной нотации:

    let id = req.params.id;
    StartedRace.findByIdAndUpdate(req.params.id,
      { $push: { waypoints: { id: { check_ins: req.body.user } } } }, { new : true } )
        .exec()
        .then(race => console.log(race))
        .catch(err => err);

Я использовал Обещание, но то же самое с обратным вызовом.

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

Заполните коллекцию списком check_ins, перечисленным по их идентификаторам.

  waypoints.check_ins = {
      ...waypoints.check_ins,
      [response.id]: response
  }

У вас будет список check_ins, на который могут ссылаться их идентификаторы.

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