简体   繁体   中英

Remove item from reference Array (Mongoose)

I have a User model that holds an array of references to other users:

friends          : [ { type: Schema.Types.ObjectId, ref: 'User' } ]

How can I remove an item from this list? This is what I'm trying so far:

var index = user.friends.indexOf(friend_id);

This properly gets the index of the item. Now I'm trying a splice:

user.friends = user.friends.splice(index, 1);
user.save();

Unfortunately this isn't working. Any advice?

There is an issue with the way you're using splice() . You are using it and expecting user.friends to be the resulting array. However, splice() actually changes the context array and returns the deleted items. So essentially, user.friends now holds the deleted items rather than the modified items.

To fix this, just remove the assignment when you perform splice() :

user.friends.splice(index, 1);

instead of how you have it currently:

user.friends = user.friends.splice(index, 1);

You could use the filter method on object,
I'm not sure about the syntax but it should be something like:

console.log(filter(Schema.Types.ObjectId, function(friends) {
  return !(user.friends == friend_id);
}
));

let me know !!

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