javascript - 用猫鼬删除嵌套对象
问题描述
我得到了这个猫鼬模式:
const UserSchema = new Schema({
email: {
type: String,
required: true,
unique: true,
},
groups: [
{
groupName: {
type: String,
required: true,
},
groupMembers: [{ type: Schema.Types.ObjectId, ref: "GroupMember" }],
},
],
});
const GroupMemberSchema = new Schema({
firstName: String,
lastName: String,
birthday: Date,
gender: String,
age: Number
});
我想要2条路线:
groupMembers
根据 objectId从数组中删除组成员。groups
根据 objectId从数组中删除整个组。
我对删除组成员路由的尝试。此路由成功从集合中删除组成员groupMembers
,但组成员仍然存在于user
集合中:
router.delete(
"/:userId/:groupId/:groupMemberId",
catchAsync(async (req, res) => {
const { userId, groupId, groupMemberId } = req.params;
await GroupMember.findByIdAndDelete(groupMemberId);
const user = await User.findById(userId);
const group = user.groups.find((group) => group._id.toString() === groupId);
const groupIndex = user.groups.indexOf(group);
const updatedGroupmembers = user.groups[groupIndex].groupMembers.filter(groupMember=> groupMember._id.toString()!==groupMemberId);
res.send({updatedGroupmembers})
})
);
解决方案
您是否尝试过使用 $pull?
router.delete(
'/:userId/:groupId/:groupMemberId',
catchAsync(async (req, res) => {
const { userId, groupId, groupMemberId } = req.params;
await GroupMember.findByIdAndDelete(groupMemberId);
const updatedUser = await User.findByIdAndUpdate({ id: userId }, { $pull: { groups: groupId } }, { new: true });
res.send({ updatedUser });
}),
);
推荐阅读
- excel - 在一列中的文本字符串中查找某些文本并删除或替换为空白
- javascript - Google Maps JavaScript API 显示灰色空白框而不是地图
- c++ - 函数内部具有 int 的类的大小和具有 int 的类的大小
- r - 如何在 R、Excel/VBA 中对解释变量的所有不同组合的时间序列数据运行不同的多元线性回归?
- c# - 如何检测字符串是否在资源文件中
- c# - 即使Android本机键盘在屏幕上统一可见,如何单击UI按钮
- c# - 增加返回大小弹性搜索
- security - OpenApi 3.0:覆盖全局安全性
- python - 嵌入在 PyQt5 窗口中的 matplotlib 图的 x 轴像素大小
- r - 如何在R中的可格式化表格中更改字体大小