Javascript Can';t使用mongoose更新子文档

Javascript Can';t使用mongoose更新子文档,javascript,node.js,mongodb,typescript,mongoose,Javascript,Node.js,Mongodb,Typescript,Mongoose,当我试图用mongoose更新子文档中的数据时遇到问题 以下是数据模型: { status: 'regular', devices: [ { ip: 'deviceIp', active: true, _id: 5f4c05cb4708cf0e37a68ac0, name: 'deviceName', os: 'deviceOs', refreshToken: 'eyJhbGciOiJSUzUxMiI

当我试图用mongoose更新子文档中的数据时遇到问题

以下是数据模型:

{ status: 'regular',
  devices:
   [ { ip: 'deviceIp',
       active: true,
       _id: 5f4c05cb4708cf0e37a68ac0,
       name: 'deviceName',
       os: 'deviceOs',
       refreshToken:
        'eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6IjEifQ.eyJ1c2VyIjoidGVzdFVzZXIiLCJtYWlsIjoidGVzdEB1c2VyLmNvbSIsImlhdCI6MTU5ODgxNzczOSwibmJmIjoxNTk4ODE3NzQxLCJleHAiOjE2MDE0MDk3MzksImF1ZCI6Im15YXVkIiwiaXNzIjoibXlpc3N1ZXIiLCJzdWIiOiJ2IiwianRpIjoiMSJ9.di6BeKZV5OufLEY8Hnk_nC_vcCsVZZ_XJecUc1h695hDbFlgxTtNOZoi-e3uvAkckclfAKjJk7T-osEGohsnfpdA07XDH3pOniGYHVw_k1u-e6-0pu9YpSop6cv7cnlsR-50QjE9vmzg4F1mBy2ZYVCp6GSfg46duXjStUOamUM30AYElSSVX5EMsK1uBg2tfVipV8xRhHCZIIdYNr-xq8G5CcZ1lEIQrtkC2ljU7roLpC5pejZ-JkaHSNNKwVARW7JuLNbb4FaSAjv_AE87faozPWAbdgXIaap8A5nLeH_-XJhwJDIIRGnwwsJM969DaTVee2F40lUfBzhugmffeg',
       loginDate: 2020-08-30T20:02:19.257Z } ],
  _id: 5f4c05c64708cf0e37a68abf,
  username: 'testUser',
  password: 'Xa8S8qxXsQqAvenX5Kk4BloZfX1XePosVCNXoyLBQz4=',
  mail: 'test@user.com',
  salt: 'hDsCu0CShRbE/XFAvw6y/8SLu4vufP7a7ewiCBLXIQ0=',
  __v: 3 }
以下是我在TS中所做的:

let userQuery=wait UserModel.find({
“devices.refreshToken”:refreshToken,
“设备.活动”:真
});
let userInfo:any=userQuery[0];
如果(!userInfo){
拒绝(“无效令牌”);
返回;
}
让device=userInfo.devices.filter(_device=>_device.refreshtToken==refreshtToken)[0];
userInfo.updateOne({u-id:userInfo.\u-id,“devices.\u-id”:device.\u-id},{$set:{“devices.$.active”:false});
每个设备都是这样生成的:

let userDevice=new DeviceModel({
…装置,
刷新令牌,
主动:对,
});
userInfo.devices.push(userDevice);

问题在于,即使查询正常运行,设备阵列中的数据也不会得到更新。我建议您首先使用例如Robo 3T:

对于您的情况,请尝试以下方法:

db.getCollection('YOUR COLLECTION NAME HERE').updateOne({ '_id': 5f4c05c64708cf0e37a68abf ,'devices._id': 5f4c05cb4708cf0e37a68ac0 }, { $set: { 'devices.$.active': false }});

尝试记录传递给updateOne调用的参数的值,以便可以检查该特定查询。