【发布时间】:2011-09-12 14:04:10
【问题描述】:
我有两个非常大的(30000 多个文档)集合,一个包含从文本文件中提取的单词(集合名称'word'),一个包含字典中的单词(集合名称'dictionary')。
如何获取两个集合中都存在的单词?
(我已经简化了这种情况,'word' 集合中的文档包含有关单词的元数据,因此每个单词都必须是一个单独的文档。)
【问题讨论】:
标签: javascript mongodb node.js
我有两个非常大的(30000 多个文档)集合,一个包含从文本文件中提取的单词(集合名称'word'),一个包含字典中的单词(集合名称'dictionary')。
如何获取两个集合中都存在的单词?
(我已经简化了这种情况,'word' 集合中的文档包含有关单词的元数据,因此每个单词都必须是一个单独的文档。)
【问题讨论】:
标签: javascript mongodb node.js
将两个集合复制到一个集合中(如有必要,包括一个鉴别器字段,以便您知道每个实例中的文档类型)。
在该集合上运行 map-reduce
在 Map 中,将单词作为键和值发出,例如 {instance:1, dict:0} 或 {instance:0, dict:1},具体取决于被映射的文档是实例还是字典条目。 (您可以根据需要在此处将更多字段添加到值中。)
在 Reduce 中,累积分数(像往常一样)。
现在查询instance > 0 和dict > 0,您会找到两者中的所有单词。
【讨论】:
让
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
【讨论】: