简体   繁体   English

无法使用猫鼬更新子文档

[英]Can't update subdocuments with mongoose

I'm having problems when I try to update data from a subdocument with mongoose当我尝试使用 mongoose 从子文档更新数据时遇到问题

here is the data model:这是数据模型:

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

And here is what I did in TS:这是我在 TS 中所做的:

let userQuery = await UserModel.find({

  "devices.refreshToken": refreshToken,
  "devices.active": true

});

let userInfo:any = userQuery[0];

if(!userInfo){

  reject("Invalid token");
  return;

}

let device = userInfo.devices.filter(_device => _device.refreshToken == refreshToken)[0];

userInfo.updateOne( { _id: userInfo._id , "devices._id": device._id},{ $set: {"devices.$.active":false} });

Each device was generated like this:每个设备都是这样生成的:

let userDevice = new DeviceModel({

  ...device,
  refreshToken,
  active:true,

});

userInfo.devices.push(userDevice);

The problem is that the data inside the devices array never gets updated, even when the query works correctly问题是设备数组中的数据永远不会更新,即使查询正常工作

I suggest you first to check the query against the mongoDB not in code, using for instance Robo 3T:我建议您首先使用代码中的 mongoDB 来检查查询,例如使用 Robo 3T:

For your case try the following:对于您的情况,请尝试以下操作:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM