繁体   English   中英

用猫鼬删除嵌套对象

[英]Delete nested object with mongoose

我得到了这个猫鼬模式:

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
});

我想要两条路线:

  • 根据 objectId 从groupMembers数组中删除组成员。
  • 根据 objectId 从groups数组中删除整个组。

我尝试删除组成员路由。 该路由成功地从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 });
  }),
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM