如果没有其他文档引用过的文档,如何从集合中删除它

时间:2020-09-23 19:14:51

标签: node.js database mongodb mongoose

我的MongoDB数据库中有两个集合:

  1. 俱乐部收藏
  2. 照片集。

它们的模式如下:


var clubsSchema = new Schema({
  clubName: { type: String },
  photosOfMembers: [{ type: ObjectId, ref:'Photos' }],
});

var photosSchema = new Schema({
  sourceUrl: { type: String },
  filePath: { type: String },
  description: { type: String }
});

我们学校有 很多 个俱乐部。 这些照片是学生的个人资料照片。 有些学生属于 多个 俱乐部,因此,多个俱乐部可以引用一张照片。

这些照片是从外部网站(例如Facebook,Reddit,Quora)中获取的,记录在数据库中,文件存储在服务器中。

每次学生加入俱乐部时,我们都会从外部网站抓取他们的照片。 我们使用photosSchema.sourceUrl来检查照片是否存在于我们的数据库中,然后将其存储(如果不存在)。 这有助于我们避免出现重复图像属于一个学生的情况。

这很好。

问题出在学生离开俱乐部时。


  • 问题:

当那个学生不再是任何俱乐部的成员时,我想删除他/她的照片。如果他/她属于某个俱乐部,则保留照片。

我的数据库有成千上万条记录-什么是最好的(最有效/最有效)的方法。

1 个答案:

答案 0 :(得分:0)

  1. 他/她离开俱乐部时,您必须更新俱乐部的收藏权。因此,在更新clubs集合时,您可以获取该学生照片的对象ID。然后,如果相同的对象ID没有映射到其他俱乐部,则您可以在俱乐部收藏中搜索,然后从照片收藏中删除该文档。

  2. 我能想到的第二种方法是使用查找。但是第一个似乎更简单