Задать вопрос
@Urbansamurai

Как в MongoDB изменить значения во встроенном в документ массиве, не меняя его _id?

На данный момент нашел только такое решение. А как добиться того, чтобы _id сохранялся сам по себе так и не разобрался.

Еще вопрос: можно ли обновлять только те значения, которые передаются в req.body. Например: передаем только новое имя, без фото. У меня почему-то в этом случае пропадает поле photo.

app.put('/models', (req, res) => {

    var d = Devices.update(
        { 'models._id': req.body.modelID },
        { $set: { 'models.$._id': req.body.modelID, 'models.$.name': req.body.name, 'models.$.photo': req.body.photo } },
        (err, result) => {
          if (err) {
            res.send(err)
          } else {
            res.send(result)
          }
        })
  })


Схема выглядит так:

var DevicesSchema = new mongoose.Schema({
  name: {
    type: String,
    trim: true,
    unique: true
  },
  photo: {
    type: String,
    trim: true,
    unique: true
  },
  models: [ {
      name: {
        type: String,
        trim: true,
        unique: true
        },
      photo: {
        type: String,
        trim: true
        },
      services: [ {
          name: String,
          price: Number,
          duration: Number,
          guarantee: Number
        }
      ]
    }
  ]
});
  • Вопрос задан
  • 540 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@emp1re
Это зачем var d = ? Через $set апдейтиться все верно, _id не меняется

'models.$._id': req.body.modelID - уберите просто.

res.send(err) - очень плохая практика
Ответ написан
Ваш ответ на вопрос

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

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