【问题标题】:How to remove a document from a collection if it has not been referred to by any other document如果文档没有被任何其他文档引用,如何从集合中删除文档
【发布时间】:2020-09-23 19:14:51
【问题描述】:

我的 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 来检查照片是否存在于我们的数据库中,如果不存在则存储它。 这有助于我们防止出现属于一个学生的重复图像的情况。

这很好用。

当学生离开俱乐部时,问题就来了。


  • 问题:

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

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

【问题讨论】:

标签: node.js database mongodb mongoose


【解决方案1】:
  1. 当他/她离开俱乐部时,你必须更新俱乐部收藏权。因此,在更新俱乐部集合时,您可以获得该学生照片的对象 ID。如果相同的对象 id 未映射到任何其他俱乐部,则您可以在俱乐部集合中搜索,然后从照片集合中删除该文档。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2014-07-28
    • 2017-02-21
    • 1970-01-01
    • 2018-05-27
    • 2021-09-23
    相关资源
    最近更新 更多