Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 尝试更新父文档mongoose中的子文档_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 尝试更新父文档mongoose中的子文档

Node.js 尝试更新父文档mongoose中的子文档,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我正在尝试使用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, "subscription

我正在尝试使用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.\u id==已验证的登录用户id

req.params.id应该是我试图编辑的subscriptionId

尝试以下操作:

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)
       })
    })
}

我试过了,我得到了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操作符中使用过滤器,但我到处都有错误。

您能发布您收藏的示例文档吗?“payload.user._id”和“req.params.id”的值是什么?@Haruo我编辑了我的帖子。我询问了“payload.user._id”和“req.params.id”的值,以便知道它们的类型。在您的文档中,“\u id”和“subscriptions.\u id”是什么类型的?String或ObjectId?ObjectId@HaruoPost请在定义/设置“req.params.id”和“payload.user._id”的值时发布您的代码。