简体   繁体   中英

remove a property from an object in an array of objects mongoose

I have a MongoDB document like this:

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

I've tried a variation of $set and $unset using:

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

when I tried multiple variations of the above code I keep on getting groups where the affected object is only left with an id.

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

I've also tried looping over the array of groups removing the key using reduce then just trying to set the groups to this new values like and that didn't work either.

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

this just doesn't do anything.

My intended result would be where thread_id is gone

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

Although similar to link1 and link2 both of those solutions either don't change anything when saved or remove all properties other than _id.

this did work for me. looks like reduce and map when using delete keyword will not affect the original array I assumed it would since i thought it was passed by reference.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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