这是我的问题:在我的Mongo数据库中,我有一个包含以下项的集合:

{
  'id': 1,
  'steps': [
    {
      action: 'start',
      info: 'foo'
    },
    {
      action: 'stop',
      info: 'bar'
    }
  ]
}

我想获得“开始”步骤的总数。
我尝试使用MongoDB聚合框架:我在$unwind上使用steps.action,在$match上使用steps.action来匹配“开始”。

但是,我得到的数据太多并达到了聚合的极限:exception: aggregation result exceeds maximum document size (16MB)。我不需要数据,我只想要计数,但是我找不到如何做的方法(尝试使用$ group却没有成功)。

提前致谢,

最佳答案

如果您想要计数,可以使用此

db.test.count({"steps.action":"start"})

但这不会考虑到步骤包含带有start Action 的多个步骤的情况。

当您还需要使用start计算所有步骤时,则需要展开数组,对steps.action进行匹配,然后将结果分组以进行计数。
db.test.aggregate({$unwind:"$steps"}, {$match:{"steps.action":"start"}},{ $group: { _id: null, count: { $sum: 1 } } })

关于mongodb - Mongodb聚合$ unwind然后计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27313922/

10-16 20:58