我有一个User模型,其中包含对其他用户的引用数组:
friends : [ { type: Schema.Types.ObjectId, ref: 'User' } ]
如何从此列表中删除项目?这就是我到目前为止所做的:
var index = user.friends.indexOf(friend_id);
这可以正确获取项目的索引。现在我正在尝试拼接:
user.friends = user.friends.splice(index, 1);
user.save();
不幸的是,这不起作用。有什么建议吗?
答案 0 :(得分:3)
您使用splice()
的方式存在问题。您正在使用它并期望user.friends
成为结果数组。但是,splice()
实际上会更改上下文数组并返回已删除的项目。基本上,user.friends
现在包含已删除的项目而不是修改的项目。
要解决此问题,请在执行splice()
时删除作业:
user.friends.splice(index, 1);
而不是目前的方式:
user.friends = user.friends.splice(index, 1);
答案 1 :(得分:0)
您可以在对象上使用过滤方法,
我不确定语法,但它应该是这样的:
console.log(filter(Schema.Types.ObjectId, function(friends) {
return !(user.friends == friend_id);
}
));
让我知道!!