我有一个用例,我想比较mongodb中两个集合的每个记录,在比较每个记录后,我需要找到所有记录的不匹配字段。
让我们举一个例子,在collection1中我有一个记录{id: 1, name: "bks"}在collection2中,我有一个记录为{id: 1, name:"abc"}当我比较上面两个具有相同键的记录时,字段名是一个不匹配字段,因为名称不同。
我想在mongodb中使用mapreduce来实现这个用例。但我面临的一些问题,而访问集合名称在地图功能。当我试图在地图函数中比较它时,我得到的错误如下:"errmsg":"异常:ReferenceError: db未定义在'
谁能给我一些关于如何使用mapreduce比较记录的想法?
我可能已经帮助你阅读了文档:
升级到MongoDB 2.4时,如果您的map-reduce操作,group命令或$操作符表达式中包含任何不再可用的全局shell函数或属性,例如db,则需要重构代码。
所以从你的错误片段,你似乎是为了访问另一个集合引用db
。你不能那样做。
如果你确实想将一个集合中的项与另一个集合中的项进行"比较",那么除了循环代码之外就没有其他方法了:
db.collection.find().forEach(function(doc) {
var another = db.anothercollection.findOne({ "_id": doc._id });
// Code to compare
})
MongoDB根本没有"连接"的概念,并且mapReduce
或aggregate
或其他操作严格地只使用一个集合。
例外是 db.eval()
,但是根据文档中所有严格警告,这几乎总是一个非常糟糕的主意。