在MongoDB中存储大数组

我正在开发一个有searchfunction的小项目。 我使用typeahead.js连接到使用expressJS和mongoDB构build的REST API。 我想知道我有两个问题最好的办法。 我主要是刚开始使用Node和MongoDB的前端人员。 以下是我需要帮助的两个问题。 但首先有一点背景,以更好地了解问题。

我正在build设的网站允许您上传video。 您可以将标签添加到这些video。 在searchvideo时,我希望能够使用typeahead.js来search这些标签。 就像YouTube一样。

所以这里是问题。

1 – 我在MongoDB中有一个“标签”集合。 上传video时,我会为该video添加标签,并将其添加到我将用于预测性search的该集合中。 随着时间的推移,这个集合应该有大量的标签来search。 我遇到的问题是如何只插入唯一的标签(那些不存在的)。 例如说,我想插入以下文件到MongoDB中:

{ tags: "tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8" } 

该集合已经有“tag1,tag2,tag4和tag7”。 所以我只想插入3,5,6和8.我的问题是什么是最好的方法来做到这一点。 我应该首先查询集合,通过parsing并比较每个标签,将那些不存在的标签分开,然后“追加”到集合中? 我看到的问题是,再次,随着时间的推移,这将是很多parsing。 所以我不确定这里最好的方法是什么。

2 – 将所有的标签存储在一个简单的数组中是否是最好的方法? 这个数组将会非常大。 再次,我不是一个数据库的人,所以我没有很好的理解如何处理这样的问题。

和往常一样,所有的帮助都非常感谢。

由于mongodb无法进行连接,因此我会在每个video文件中存储标签myVideo.tags = ['sports', 'baseball', 'pitcher'] 。 然后,为了给自动build议提供动力,我会定期在video集合中映射/缩小,并将有效标记集输出到单独的标记集合中。 如果在156个video中使用“棒球”标记,则可以计算stream行度分数并存储{tag: 'baseball', score: 156}之类的内容,然后使用该标记对自动build议结果进行sorting,以便更stream行的标记在用户input'ba'时会比较早显示,例如“棒球”在“烘焙”之前列出,因为这是一个更可能的正确完成而不是按字母顺序排列的第二个。

下面是mongodb食谱的一个例子 。

在你的问题点2,不。 从不将无限长的一组数据作为一个数组存储在一个mongodb文档中。 有一个最大的文件大小(目前16MB),所以随着时间的推移只会增长和增长的东西必须是一个独特的文件的集合。