正在从MongooseJS中的子集合中删除引用



我有一个包含子引用数组的架构:

const schemaSet = {
userSchema: new Schema({ 
name: { 
type: String,
required: true
}
}),
groupSchema: new Schema({
name: {
type: String,
required: true
},
members: [ {
type: Schema.Types.ObjectId
ref: 'User'
}]
})
}

这可以很好地创建组并向其中添加用户,但我发现我无法从组中删除用户。

到目前为止,我得到的最接近的是:

async removeUser(group, userId) {
console.log("Before: group has "+group.members.length+" members");
await group.members.pull({ _id : userId });
console.log("After: group has "+group.members.length+" members");
await group.save();
}

这将在调用前后注销正确的大小,并且运行时不会出现错误,但下次检索该组时,该成员仍然存在。我也尝试过使用remove,结果基本相同。

我只想从members集合中删除引用,用户需要持久化。如何坚持删除对文档的引用?

我花了一段时间才发现这一点。如果您有一个组模型(使用const Group = mongoose.model("Group", groupSchema)创建(,以及要从组中删除的用户的id,则可以使用以下语法:const updatedGroup = await Group.findOneAndUpdate({ members: userId }, { $pull: { members: userId }}, {new: true, useFindAndModify: false});该函数中的第三个参数表示应该返回更新后的文档,并确保不会收到警告。实际上,只有当组与用户的关系是一对多(即任何用户只能在一个组中(时,该语法才会起作用。如果关系是多对多的,我想你必须使用以下内容:await Group.where({ members: userId}).update({ $pull: { members: userId }});

最新更新