Mongodb组加入两个集合
我知道使用map reduce是可能的,但我想知道是否可以在keyf函数中使用group来加入2个集合Mongodb组加入两个集合,mongodb,Mongodb,我知道使用map reduce是可能的,但我想知道是否可以在keyf函数中使用group来加入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 => { :
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驱动程序,但这并不重要,因为查询实际上是原始的。不可能使用group函数连接两个集合。group函数用于聚合,cond query表达式用于选择文档,key表达式或keyf函数提供分组,initial表达式和reduce函数用于处理组,finalize函数用于处理聚合结果中的每个项目 请注意,聚合组函数用于单个集合,即所有数据都来自单个集合。在map reduce引用中,连接的等价物是在输出集合上运行reduce函数时将两个集合映射到公共键和公共输出集合的结果 通过使用mongoshell运行以下命令,您可以在服务器上运行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 } ]