【问题标题】:Mongodb Aggregate Using Group And Getting Count Of Properties Which Equal ConditionMongodb使用组聚合并获取条件相等的属性计数
【发布时间】:2017-10-09 10:40:10
【问题描述】:

我正在尝试尽可能高效地实现以下查询,因此我使用的是 Mongodb Aggregation 框架。

我有一个名为 mydevices 的集合,其中包含文档,每个文档都代表以下格式的设备:

{
  BUILDING: 'stringValue',
  DEVICECLASS: 'stringValue',
}

我试图实现的输出是每个 BUILDING 的数组,其中包含每个类别中每个 DEVICECLASS 的设备数,例如

'building xy': {
   'mobile phone': 5,
   'destkop': 3
}

到目前为止我所尝试的:

  collection.aggregate(
        [
            {
                $group:{ // group by building
                    _id: {BUILDING},
                    DEVCLASS: {DEVCLASS} // save devclass as property
                }
            }
        ]
    )

似乎$count 运算符对我的情况没有帮助?

$count 返回一个文档,其中包含输入到阶段的文档数的计数。

我已经阅读了文档,但现在我被困住了。怎样才能达到效果?

【问题讨论】:

  • 试试collection.aggregate( [ { $group:{ _id: {BUILDING:"$BUILDING",DEVICECLASS:"$DEVICECLASS"} COUNT: {$sum:1} } } ] )
  • @Veeram 使用这个我只得到所有设备的总数,而不知道给定设备类中某个位置的设备数

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

试试:

collection.aggregate([{$group:{_id:{"building" : "$building", "deviceclass":"$deviceclass"},count:{$sum:1} }},
       {$group:{_id:{"building" : "$_id.building" },result : {$push : {"deviceclass" : "$_id.deviceclass","count" : "$count"}}}},
        {$project : {"building" : "$_id.building" , "deviceclass" : "$result",_id:0}}
    ])  

你会得到:

{
    "building" : "building xy",
    "deviceclass" : [ 
        {
            "deviceclass" : "mobile phone",
            "count" : 2.0
        }, 
        {
            "deviceclass" : "destkop",
            "count" : 1.0
        }
    ] 
}

【讨论】:

  • Ty,它正在工作。一些关于它如何工作的 cmets 会很好,所以我可以按照聚合步骤...
  • 第一组关于建筑和设备类,因此数据被分组在建筑和设备类中..在该组之后,结果中显示了相同的设备类和相同的建筑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2019-06-25
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 2021-03-13
  • 2018-06-08
相关资源
最近更新 更多