我有一组具有长值的文档,我想将它们减少为分层结果以减少带宽。以下面的文档为例:
{
"platform" : "osx",
"buildmode" : "release",
"testsuite" : "geometry sub system",
"testcase" : "comparison of bounding box techniques",
},
{
"platform" : "osx",
"buildmode" : "release",
"testsuite" : "geometry sub system",
"testcase" : "comparison of bounding box techniques",
},
{
"platform" : "win7",
"buildmode" : "debug",
"testsuite" : "payload storage",
"testcase" : "fit-to-size",
}
每次更改版本中有1200个,并且发送回所有1200的带宽很重,特别是因为关键字" osx"," release"和"几何子系统"重复了这么多次。我想返回这些数据,以便顶级对象具有一个名为的对象数组:' platform'和buildmodes:[array]其中buildmode是一个具有' name&的对象数组#39; :buildmode和testsuite:[array],以及on和on。基本上这样,少数测试套件将包含其中的测试用例。
我做了一些分析,并确定这应该缩小我的输出,并使我的UI工具(四个组合框的集合)更容易编写。
答案 0 :(得分:1)
您可以尝试以下聚合。
db.collection.aggregate([
{"$group":{
"_id":{"platform":"$platform","buildmode":"$buildmode","testsuite":"$testsuite"},
"testcase":{"$push":"$testcase"}
}},
{"$group":{
"_id":{"platform":"$_id.platform","buildmode":"$_id.buildmode"},
"testsuite":{"$push":{"testsuite":"$_id.testsuite","testcase":"$testcase"}}
}},
{"$group":{
"_id":{"platform":"$_id.platform"},
"buildmode":{"$push":{"buildmode":"$_id.buildmode","testsuite":"$testsuite"}}
}}
])