2010-07-16 46 views
1

我在MongoDB中有一个涉及大量电子邮件的数据集,我需要能够向该集合添加电子邮件并能够检查某些电子邮件是否在集合中。我想到这样的文件结构:MongoDB中的大集合实现

{'key':'foo','emails':['[email protected]','[email protected]',...]}

并使用$ addToSet和$ in。但问题是,Mongo有4MB的文件限制,如果有很多电子邮件,它可能是不够的。我可以将它分为信息键/电子邮件部分,但我担心它会使匹配(因为电子邮件现在不在一个地方)并插入(因为我需要检查唯一性)较慢。那么,最好的办法是什么?

回答

1

取决于您要使用多少组电子邮件,您可以将每组电子邮件作为一个集合,其中每个文档仅由电子邮件地址组成。然后,您可以在电子邮件地址创建唯一索引:

db.foo.ensureIndex({email:1},{unique:true})

+0

有多少套,每一个都有自己的密钥(搜索是withis使用相同的密钥电子邮件)。索引可能工作,但我担心它会比较慢,因为电子邮件不会被存储在一起。 – StasM 2010-07-17 06:25:30

+0

如果你只关心一个系列中的独特性,那么创建一个独特的索引就像它会得到的一样快。这正是使用索引的目的。 – 2010-07-18 23:10:11