Mongodb集团加入两个集合

时间:2012-04-21 11:11:26

标签: mongodb

我知道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,但它并不重要,因为查询(实际上)是原始的。

1 个答案:

答案 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 } ]