如何使用mapreduce比较mongodb中两个集合的所有记录?

时间:2014-05-12 07:46:16

标签: mongodb mapreduce

我有一个用例,我希望在mongodb中比较两个集合的每个记录,并在比较我需要找到所有记录的不匹配字段的每个记录之后。

我们举一个例子,在collection1中我有一条记录{id:1,name:“bks”} 在collection2中我有一个记录为{id:1,name:“abc”} 当我使用相同的键比较上述两个记录时,由于名称不同,字段名称是不匹配字段。

我正在考虑使用mongodb中的mapreduce来实现这个用例。但是我在地图功能中访问集合名称时遇到了一些问题。当我尝试在map函数中比较它时,我收到错误:“errmsg”:“exception:ReferenceError:db未在'附近定义

有人可以给我一些关于如何使用mapreduce比较记录的想法吗?

1 个答案:

答案 0 :(得分:0)

我可能帮助你read the documentation:

  

升级到MongoDB 2.4时,如果map-reduce操作,组命令或$ where运算符表达式包含任何不再可用的全局shell函数或属性,则需要重构代码,例如 db

因此,从您的错误片段中,您似乎引用了db以访问另一个集合。你不能这样做。

如果您确实打算将一个集合中的项目与另一个集合中的项目“比较”,那么除了循环代码之外没有其他方法:

db.collection.find().forEach(function(doc) {

    var another = db.anothercollection.findOne({ "_id": doc._id });

    // Code to compare

})

MongoDB根本没有“连接”的概念,mapReduceaggregate或其他操作只能与一个集合一起使用。< / p>

例外是db.eval(),但根据文档中的所有严格警告,这几乎总是一个非常糟糕的主意。

在循环代码中实现比较。