我想对两个不同的文档集执行连接操作,这两个文档有一个共同的字段。我有以下设置。
收藏A
{
"common_key" : "v1" ,
"a2" : "v2",
"a3" : "v3",
.....
}
收藏B
{
"common_key" : "v1" ,
"b2" : "z2",
"b3" : "z3",
.....
}
由于mapReduce只能处理一个集合,因此我将A和B的内容合并到集合Combo
中。此外,我又添加了一个字段_dataType
来表示它是A型还是B型
收藏组合= A + B
{
"common_key" : "v1" ,
"b2" : "z2",
"b3" : "z3",
"_dataType" : "B",
.....
}
{
"common_key" : "v1" ,
"a2" : "v2",
"a3" : "v3",
"_dataType" : "A",
.....
}
我想编写一个mapReduce函数,以便对于每种数据类型A和A具有相同common_key
的所有文档。 B它应该输出
{
"common_key" : v1 ,
"A" : [
{
"a2" : "v2",
"a3" : "v3",
...
},
...
],
"B" : [
{
"b2" : "z2",
"b3" : "z3",
.....
},
..
]
}
非常感谢任何指针或帮助
答案 0 :(得分:0)
使用聚合框架快速回答
db.coll.aggregate({
"$group": {
"_id": "$common_key",
"A": {
"$push": {
"$cond": [
{
"$eq": [
"$_dataType",
"A"
]
},
{
"a2": "$a2",
"a3": "$a3"
// you have to put all A dataType field here
},
{}
]
}
},
"B": {
"$push": {
"$cond": [
{
"$eq": [
"$_dataType",
"B"
]
},
{
"b2": "$b2",
"b3": "$b3"
// you have to put all B dataType field here
},
{}
]
}
}
}
})
缺点:您必须编写A和B数据类型的所有字段来投影它们,并且每个数组(A和B)上都有空对象