MongoDB内容管理查询(SQL中的分组和区别)

时间:2015-04-16 15:08:57

标签: mysql mongodb entity-relationship

我正在尝试管理上传到服务器的媒体并删除不再使用的文件。

媒体文件可以通过多个条目链接,一个条目可以恰好链接一个媒体文件"内容"但我可以删除内容并添加一个新内容。

一个媒体文件包括缩略图,预览图像,移动,标清和高清视频,低质量和高质量的音频或可下载的文件(PDF,PPT,Word等)

当媒体被删除时#34;从最后一个条目开始,它应该被删除。

我的想法来自MySQL,我会做类似的事情:

让桌面媒体包含媒体文件的所有链接以及我的"条目之间的交叉表"表和媒体表。

在交叉表中,当删除条目或上传新媒体时,我会删除相应的行(因此删除了链接)

任何时候,我的cronjob删除媒体运行,我会检查媒体表的哪个条目不在crosstable中并删除这些条目。

我怎样才能在MongoDB中做到这一点?

1 个答案:

答案 0 :(得分:1)

你的问题有点令人恼火,因为你说“一个条目只能链接一个媒体文件”和“[...]以及我的条目表和媒体表之间的交叉表”。如果您的意思是链接表,为什么在MySQL中需要它?

无论如何,无论你是想要M:N还是1:N关系,你都可以用同样的方式做到:

entry { 
   _id : ObjectId("..."),
   // 1:N
   mediaId : ObjectId("..."),
   // M:N
   mediaIds : [ ObjectId("..."), ... ]
   ...
}

media { 
   _id : ObjectId("..."),
   ...
}

您的工作人员必须遍历所有媒体文档并检查是否存在相应的条目。由于这在计算上可能是昂贵的,因此在每个媒体文档中保留refCount可能是值得的,当插入引用该媒体的新条目时,{{1}}递增,并且在删除时递减。由于该计数器在极少数情况下可能不正确(竞争条件,客户端/数据库崩溃或两个操作之间的网络分区),您可能需要确保在实际删除之前确实没有引用。