繁体   English   中英

从对象数组中的对象中删除属性 mongoose

[英]remove a property from an object in an array of objects mongoose

我有一个这样的 MongoDB 文档:

{
  "_id": ObjectId("5589044a7019e802d3e9dbc5"),
  groups:[
    {
      _id: 5a3326d01b2213894672fdd0,
      group_id: '13239517',
      thread_id: 'f32940da-12-15-01-9325790',
      Last_post_id: '981206845'
    }
  ]
}

我尝试了$set$unset的变体,使用:

User.findOneAndUpdate({userId}, {groups:{$set: {thread_id: ''}}}, {new: true})

当我尝试上述代码的多种变体时,我继续获取受影响对象仅留下一个 id 的组。

[
  { _id: 5a3326d41b2213894672fdd1 },
  {
    _id: 5a332a81479a728ebe4226e5,
    group_id: '13239517',
    thread_id: 'f32940da-12-15-01-9325790',
    Last_post_id: '981206845'
  }
]

我还尝试循环使用 reduce 删除键的组数组,然后尝试将组设置为这个新值,例如,这也不起作用。

let groups = groups.reduce((prev, ele)=>{
  // group_id is passed in as an argument
  if(ele.group_id === group_id){
    let chatThread = ele.thread_id
    delete ele.thread_id
    console.log(ele)
    return chatThread
  } else {
    return prev
  }
}, false)
User.findOneAndUpdate({userId}, {groups}, {new: true})

这只是没有做任何事情。

我的预期结果将是thread_id消失的地方

groups:[
  {
    _id: 5a3326d01b2213894672fdd0,
    group_id: '13239517',
    Last_post_id: '981206845'
  }
]

尽管与link1link2类似,这两个解决方案在保存或删除_id 以外的所有属性时都不会更改任何内容。

这对我有用。 使用 delete 关键字时看起来像 reduce 和 map 不会影响我认为它会影响的原始数组,因为我认为它是通过引用传递的。

User.findOne({userId}, async(err, user)=>{
            let new_groups = user.groups.map(ele=>{
              // group id is passed as an argument
              if(ele.group_id === group_id){
                return {
                  group_id:ele.group_id,
                  _id: ele._id,
                  Last_post_id: ele.Last_post_id
                }
              }
              return ele
            })
            var updateUserGroups = await User.findOneAndUpdate({userId}, {groups: new_groups}, {new: true})

暂无
暂无

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

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