在MongoDb中查找两个集合之间的交集

时间:2011-09-12 14:04:11

标签: javascript mongodb node.js

我有两个非常大(30000+个文档)的集合,一个包含从文本文件中提取的单词(集合名称'word'),另一个包含来自字典的单词(集合名称'dictionary')。

如何获取两个集合中存在的单词?

(我简化了这种情况,'word'集合中的文档包含有关单词的元数据,因此每个单词必须是一个单独的文档。)

2 个答案:

答案 0 :(得分:4)

将两个集合复制到一个集合中(如果需要,请包括一个鉴别器字段,以便您可以告诉每个实例中的文档类型。)

在该集合上运行map-reduce

在Map中,根据被映射的文档是实例还是字典条目,将单词作为键和值发出,例如{instance:1, dict:0}{instance:0, dict:1}。 (您可以根据需要在此处添加更多字段。)

在减少中,累积分数(像往常一样)。

现在进行查询,查找instance > 0dict > 0,并且您拥有两者中的所有字词。

答案 1 :(得分:-1)

 db.word.findOne() >{ word:'a_word', ... }

 db.dict.findOne() >{ word:'a_word', def:'def_of_a_word', ... }

在单词col中找到单词。

db.word.distinct('word')

检查dict col。

中是否存在a_word
db.dict.count({word:'a_word'})  // 0=not exist