无论如何,有没有要删除一个Document,然后自动更新参考模型的ObjectId数组?

时间:2019-03-15 17:33:26

标签: mongodb mongoose

这是我的模特。

const UserSchema = mongoose.Schema({
  name: String,
  comments: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Comment'
    }
  ]
});

const CommentSchema = new mongoose.Schema({
  comment: String,
  creatorId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }
});

用户可能有很多评论。
因此,用户和评论是一对多的关系。
当用户创建新注释时,将创建一个新注释并将其ObjectId推送到用户注释数组。

我想做的是, 删除一个Comment时,会自动删除Comment的ObjectId。

我知道我可以通过两个查询来做到这一点。
反正有将这两者合二为一吗?

await user.comments.remove(comment.id);
await comment.remove();

1 个答案:

答案 0 :(得分:2)

您不能在两个集合/模式上运行remove,但是您可以利用Post Middleware并在CommentsSchema上定义这样的中间件:

CommentsSchema.post('remove', function(comment) {
    await UserSchema.update({ _id: comment.creatorId }, { $pull: { comments: comment._id } })
});