Попытка обновить поддокумент в родительском документе mongoose - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь обновить или удалить вложенный документ из родительского документа, используя mongoose.

Мой код:

editSubscription(req, res) {
    const token = req.headers.authorization;
    jwt.verify(token, req.app.get('yourSecretKey'), function (err, payload) {
        userModel.update({ _id: payload.user._id, "subscriptions._id": req.params.id }, { "$set": { "subscriptions.$": req.body } }, function (err, obj) {
           console.log(obj)
       })
    })
}

Вывод файла console.log:

{ n: 0, nModified: 0, ok: 1 }

Как мне это сделать? я знаю, что если его модифицировать, то nModified возвращает 1. Я не могу найти никаких документов о том, как подойти или решить эту проблему, и все решения здесь на stackoverflow, которые я уже пробовал, ничего не работает.

Примердокумент в моей коллекции:

id: '5db990daa05aa90de0c8b86b',
user:
{ role: 'User',
 subscriptions: [ 
  { active: true,
_id: '5dbad05aaf232e2bdc033339',
name: 'Basic Fit',
price: 20,
paymentDate: '07-11-2020',
created: '2019-10-31T12:15:22.360Z',
updated: '2019-10-31T12:15:22.360Z' },
{ active: true,
_id: '5dbad2568bf56255a0f39bc7',
name: 'Netflix',
price: 10,
paymentDate: '07-11-2019',
created: '2019-10-31T12:23:50.141Z',
updated: '2019-10-31T12:23:50.141Z' } ]
  ],
 _id: '5db990daa05aa90de0c8b86b',
 fullname: 'Test naam',
 email: 'test1@mail.com',
 password:
  '$2a$10$VzBnIcVraIRdmzy6rPHOX.7gGOXToTBNISLEfi429OfpRx02FxCaO',
 birthDate: '02-12-1988',
 created: '2019-10-30T13:32:10.276Z',
 updated: '2019-10-30T13:32:10.276Z',
 __v: 0 },

payload.user._id == подтвержденный зарегистрированный идентификатор пользователя

req.params.id должен быть подпиской, которую я пытаюсь редактировать

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Я пытался, и я получаю ответ об ошибке 500 обратно.

Когда я удаляю 'req.params.id' и я делаю это так:

userModel.updateOne({ _id: payload.user._id }, { "$set": { "subscriptions.0.price": 
req.body.price} }).then(user => {
           console.log(user)
        }).catch(err => {
           console.log(err)
       })

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

Я попытался использовать фильтр в операторе $ set, но я везде получаю ошибки ..

0 голосов
/ 31 октября 2019

Попробуйте это:

editSubscription(req, res) {
    const token = req.headers.authorization;
    jwt.verify(token, req.app.get('yourSecretKey'), function (err, payload) {
        userModel.update({ _id: ObjectId(payload.user._id), "subscriptions._id": ObjectId(req.params.id) }, { "$set": { "subscriptions.$": req.body } }, function (err, obj) {
           console.log(obj)
       })
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...