如何在 mongodb 中聚合子集合并应用 $count 不起作用

Posted

技术标签:

【中文标题】如何在 mongodb 中聚合子集合并应用 $count 不起作用【英文标题】:How to get aggregation of child collection in mongodb and apply $count is not working 【发布时间】:2018-07-22 17:01:47 【问题描述】:

我想对每个信标的计数值求和。我正在使用聚合查询,但它返回计数为 0。如果查询有误,请告诉我。

样本数据

[                    
                        "_id" : ObjectId("5a8166392aa41ec66efc66bf"),
                        "userID" : "5a7c3410bdff0f0014181874",
                        "date" : ISODate("2018-02-08T11:04:54.000Z"),
                        "beacons" : [ 
                            
                                "counts" : "2",
                                "UUID" : "red"
                            , 
                            
                                "counts" : "1",
                                "UUID" : "blue"
                            
                        ]
                    ,
                    
                        "_id" : ObjectId("5a8166392aa41ec66efc66c0"),
                        "userID" : "5a7c3410bdff0f0014181874",
                        "date" : ISODate("2018-02-08T11:04:54.000Z"),
                        "beacons" : [ 
                            
                                "counts" : "2",
                                "UUID" : "red"
                            , 
                            
                                "counts" : "1",
                                "UUID" : "blue"
                            
                        ]
                    
            
]

查询

                /* Query */

                    db.getCollection('CountsDetail')
                    .aggregate([
                    
                      "$unwind":"$beacons"
                    ,
                    
                        "$group": 
                        "_id":"$beacons.UUID", "counts": "$sum":"$counts"
                    
                    ]);
            

回应

            /* Response */
              
                   
                      "_id" : "red",
                      "counts" : 0
                   
          
                   
                     "_id" : "blue",
                     "counts" : 0
                   

响应总和返回 0,这很奇怪。请纠正我做错了什么。谢谢

【问题讨论】:

修复计数以具有数值。 $sum 包含总和字符串值并尝试db.getCollection('CountsDetail') .aggregate([ "$unwind":"$beacons" , "$group": "_id":"$beacons.UUID", "counts": "$sum":"$beacons.counts" ]) 【参考方案1】:

很抱歉错过阅读您的 OP。您的 counts 字段是嵌套的,因此请使用点符号:

  "counts": "$sum":"$beacons.counts"

【讨论】:

以上是关于如何在 mongodb 中聚合子集合并应用 $count 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在聚合期间将mongodb子集合的objectid转换为字符串

将 MongoDB 视图合并到 Node 中

用于合并来自同一个表的两个聚合子集的 SQL 查询

MongoDB——聚合管道之$match和$count操作

在mongodb聚合中将多个对象合并为一个对象

基于键合并两个数组并使用 mongodb 聚合添加新字段