从引用数组中删除项目(Mongoose)

5

我有一个用户模型,其中包含对其他用户的引用数组:

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

我该怎么从这个列表中删除一个项目?下面是我目前尝试的方法:

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

这样可以正确获取该项的索引。现在我要尝试进行splice操作:

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

很不幸,这个没有起作用。有什么建议吗?

这应该能工作,你检查一下 friend_id 是否真的在那个数组中了吗? - Jakub Martyčák
2个回答

7

您使用splice()的方式存在问题。您正在使用它并期望user.friends成为结果数组。然而,splice()实际上会改变上下文数组并返回被删除的项目。因此,实际上user.friends现在保存已删除的项目而不是修改后的项目。

要解决此问题,请在执行splice()时删除赋值:

user.friends.splice(index, 1);

而不是当前方式:

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


1
你可以在对象上使用过滤器方法,语法不确定,但应该是类似这样的形式:
console.log(filter(Schema.Types.ObjectId, function(friends) {
  return !(user.friends == friend_id);
}
));

让我知道!!

完美地与mongoose 5.7.7配合工作。这是对我有效的唯一方法。谢谢! - Br0wn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接