使用MongoDB聚合将数据收集成分层结果以节省带宽

Posted

技术标签:

【中文标题】使用MongoDB聚合将数据收集成分层结果以节省带宽【英文标题】:Use MongoDB aggregate to collect data into hierarchical results to save bandwidth 【发布时间】:2018-03-15 00:05:05 【问题描述】:

我有一组具有长值的文档,我想将它们减少为分层结果以减少带宽。以以下文档为例:


  "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”和“geometry sub system”重复了很多次。我想返回此数据,以便***对象具有名称为“平台”的对象数组和构建模式:[数组],其中构建模式是具有“名称”的对象数组:构建模式和测试套件:[数组],然后继续。本质上是这样一小部分测试套件将包含其中的测试用例。

我做了一些分析,并确定这应该会缩小我的输出,并使我的 UI 工具(四个组合框的集合)更易于编写。

【问题讨论】:

【参考方案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"
  
])

【讨论】:

以上是关于使用MongoDB聚合将数据收集成分层结果以节省带宽的主要内容,如果未能解决你的问题,请参考以下文章

详细教程一文参透MongoDB聚合查询

MongoDB笔记 聚合(详细)

MongoDB笔记 聚合(详细)

MongoDB——聚合操作

MongoDB——聚合操作

翻译MongoDB指南/聚合——聚合管道