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

Finding intersection between two collections in MongoDb

本文关键字:集合 两个 之间 MongoDb      更新时间:2023-09-26

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

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

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

将这两个集合复制到一个集合中(必要时包括一个discriminator字段,以便您可以区分每个实例中的文档类型)

在该集合上运行map-reduce

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

在Reduce中,像往常一样累积分数。

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

let

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

查找单词

db.word.distinct('word')

检查字典中是否存在a_word

db.dict.count({word:'a_word'})  // 0=not exist