我有以下文件:
{ "col1": "camera", "fps": "1F", "device": "Multi" },
{ "col1": "camera", "fps": "3F", "device": "Multi" }
{ "col1": "recorders", "fps": "9F", "device": "VideoPlayer" }
{ "col1": "cell", "fps": "8F", "device": "camcorder" }
{ "col1": "cell", "fps": "3F", "device": "camcorder" }
{ "col1": "phone", "fps": "3F", "device": "camcorder" }
....我正在尝试创建一个如下所示的数据透视表:
{ _id: "col1", [ { "camcorder": { "3F": 2, "8F": 1 }}, { "VideoPlayer": { "9F": 1 }}, { "Multi": { "3F":1, "1F":1" }} ] }
我正在做以下事情:
map = function() { key = "col1"; value = { this.fps: device }; print(value.foo); emit(key, value); }
reduce2 = function(key, value) { retval = {}; key = value; retval[key] = (retval[key] || 0) + 1; return retval; }
这不是真的有效,它导致以下结果:
{ "_id" : "col1", "value" : { "[object Object],multi,videoplayer,camcorder" : 1 } }
基本上,这将是fps的总和,按设备分组。
请帮忙。
答案 0 :(得分:2)
我知道我的建议并不完全是你想要的,但也许它可以帮助你。
var aggregated = db.coll.aggregate({$group: {_id:{device:"$device", fps:"$fps"
}, count: {$sum:1}}}, {$project: {device: '$_id.device', fps: '$_id.fps', count:
'$count'}}, {$group:{_id:"$device", result:{$push:{"fps":"$fps","count":"$count
"}}}})
结果将是:
{
"result" : [
{
"_id" : "Multi",
"result" : [
{
"fps" : "3F",
"count" : 1
},
{
"fps" : "1F",
"count" : 1
}
]
},
{
"_id" : "camcorder",
"result" : [
{
"fps" : "3F",
"count" : 2
},
{
"fps" : "8F",
"count" : 1
}
]
},
{
"_id" : "VideoPlayer",
"result" : [
{
"fps" : "9F",
"count" : 1
}
]
}
],
"ok" : 1
}
我认为合并分组文档并不难。