【问题标题】:Finding intersection between two collections in MongoDb在 MongoDb 中查找两个集合之间的交集
【发布时间】:2011-09-12 14:04:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript mongodb node.js


    【解决方案1】:

    将两个集合复制到一个集合中(如有必要,包括一个鉴别器字段,以便您知道每个实例中的文档类型)。

    在该集合上运行 map-reduce

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

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

    现在查询instance > 0dict > 0,您会找到两者中的所有单词。

    【讨论】:

      【解决方案2】:

       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
      

      【讨论】:

        猜你喜欢
        • 2015-08-19
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        相关资源
        最近更新 更多