我知道map reduce(reference)是可能的,但我想知道是否可以使用group(特别是在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 Driver,但它并不重要,因为查询(实际上)是原始的。
答案 0 :(得分:0)
使用“group”功能无法连接两个集合。 group函数用于聚合,cond查询表达式用于选择文档,key表达式或keyf函数提供分组,初始表达式和reduce函数处理组,而finalize函数允许你处理每个项目。聚合结果。
请注意,聚合“组”功能适用于单个集合,即所有数据都来自单个集合。在map-reduce引用中,连接的等价物是在输出集合上运行reduce函数时将两个集合映射到公共键和公共输出集合的结果。
您可以通过使用mongo shell运行以下命令,在服务器上运行组功能的上下文中自行验证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 } ]