汇总嵌套子文档以进行聚合查询

时间:2015-03-24 04:31:27

标签: mongodb aggregation-framework

我的文件存储方式如下:

{
  _id: 1001,
  name: "pointa"
  data: [
    {
      dataid: 123,
      parentid: 44,
      count: 12
    },
    {
      dataid: 234,
      parentid: 45,
      count: 5
    }
  ],
  subPoints: {
    pointa_a: {
      name: "pointa_a",
      data: [
        {
          dataid: 123,
          parentid: 44,
          count: 4
        },
        {
          dataid: 234,
          parentid: 45,
          count: 5
        }
      ]
    },
    pointa_b: {
      name: "pointa_b",
      data: [
        {
          dataid: 123,
          parentid: 44,
          count: 8
        },
      ]
    },
  }
},
// 'pointb' has no subpoints
{
  _id: 1001,
  name: "pointb"
  data: [
    {
      dataid: 123,
      parentid: 44,
      count: 3
    },
    {
      dataid: 234,
      parentid: 45,
      count: 25
    }
  ]
}

我希望能够获得"数据"按dataidparentid分组。我的查询可能类似于所有的pointa_b和所有的pointb,因此它可以是根或者,它可以是嵌套文档的组合。我尝试使用展开来将子点的所有数据调到根级别,但是如果文档没有该特定的子点,则它不会显示在结果中

例如,如果我这样做:

db.test1.aggregate([
  {$unwind : "$data"},
  {$unwind : "$subPoints.pointa_b.data"}
]);

然后是" pointb"的数据不见了。如果我可以在根级别拥有所有这些数据,那么我知道我可以使用$cond来执行$project来提取我需要的数据。或者即使我没有具有subPoints的文档的根级数据,我也可以总结subPoints中的数据,因为它会累加到父级,但我不知道如何压平它像这样。

有没有办法取消嵌套具有相同父结构的子文档?

0 个答案:

没有答案