繁体   English   中英

MongoDB 聚合组和计数嵌套数组

[英]MongoDB aggregate group and count nested array

我是 MongoDB 的新手,并尝试使用这些数据进行汇总

db.probes.insertMany([
{ '_id' : 1, 'item' : 'abc', 'ts' : new Date('2014-03-01T08:00:00Z'), 'probs' : ['P1', 'P2', 'P3', 'P4', 'P5'] },
{ '_id' : 2, 'item' : 'jkl', 'ts' : new Date('2014-03-01T09:00:00Z'), 'probs' : ['P2', 'P3', 'P4', 'P5'] },
{ '_id' : 3, 'item' : 'xyz', 'ts' : new Date('2014-03-15T09:00:00Z'), 'probs' : ['P3', 'P4', 'P5'] },
{ '_id' : 4, 'item' : 'xyz', 'ts' : new Date('2014-04-04T11:21:39.736Z'), 'probs' : ['P4', 'P5'] },
{ '_id' : 5, 'item' : 'abc', 'ts' : new Date('2014-04-04T21:23:13.331Z'), 'probs' : ['P5'] }
]);

我想对嵌套数组进行分组和计数,怎么可能得到这样的 output?

// output 1

{
    'P1' : 1, 'P2' : 2, 'P3' : 3, 'P4' : 4, 'P5' : 5,
}

// output 2

{
    { 'P1' : 1, 'ts' : { 2014-03-01T08:00:00Z } },
    { 'P2' : 2, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z } },
    { 'P3' : 3, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z } }
    { 'P4' : 4, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z, 2014-04-04T11:21:39.736Z } } }
}

// output 3

{
    { 'P1' : { 'count' : 1, 'ts' : { 2014-03-01T08:00:00Z } },
    { 'P2' : { 'count' : 2, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z } },
    { 'P3' : { 'count' : 3, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z } }
    { 'P4' : { 'count' : 4, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z, 2014-04-04T11:21:39.736Z } } }
    { 'P5' : { 'count' : 5, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z, 2014-04-04T11:21:39.736Z, 2014-04-04T21:23:13.331Z } } }
}

您需要结合$unwind$group$addToSet 例如:

db.collection.aggregate([
  {
    $unwind: "$probs"
  },
  {
    $group: {
      _id: "$probs",
      count: {
        $sum: 1
      },
      ts: {
        $addToSet: "$ts"
      }
    }
  }
])

https://mongoplayground.net/p/c4O5zfxhRCl

您可以将其用作您想要的所有格式的基础。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM