1

我知道使用 map reduce (参考)是可能的,但我想知道是否可以使用组(特别是在keyf函数中)加入 2 个集合。

MYCOLL.collection.group(:keyf => "function(doc) { var var2Item=db.mycoll2.find({\"_id\":doc.my_sub_id}); var2=var2Item.join_var; return {'myreturn': doc.var1 + var2 }; }",     
:initial => { :r => 0 }, 
:reduce => "function(doc,prev) { prev.r += +1; }", 
:cond => {( ...my_conditions...)})

我也试过

var2=doc.my_sub_id.join_var    

而且似乎都不起作用。我正在使用 Ruby 驱动程序,但这并不重要,因为查询(实际上)是原始的。

4

1 回答 1

0

使用“组”功能无法加入两个集合。group 函数用于聚合,cond 查询表达式用于选择文档,key 表达式或 keyf 函数提供分组,初始表达式和 reduce 函数处理组,finalize 函数允许您处理聚合结果。

请注意,聚合“组”功能适用于单个集合,即所有数据都来自单个集合。在 map-reduce 引用中,join 的等价物是将两个集合映射到公共键和一个公共输出集合的结果,同时在输出集合上运行 reduce 函数。

您可以通过使用 mongo shell 运行以下命令,在服务器上运行 group 函数的上下文中自己验证 find 函数是否未定义。

db.coll.remove();
db.coll.insert({a: 1, b: 2});
printjson(db.coll.group(
    {
        keyf: function(doc) { return {x: db.coll.find({a: true})}; },
        reduce: function(doc,prev) { prev.r += 1; },
        initial: { r: 0 }
    }));

结果是:

[ { "x" : "DBQuery: test.coll -> undefined", "r" : 1 } ]
于 2012-04-23T19:00:42.880 回答