在 mongodb 中计数不同而不给出不同的结果

Posted

技术标签:

【中文标题】在 mongodb 中计数不同而不给出不同的结果【英文标题】:Count distinct in mongodb not giving distinct results 【发布时间】:2019-04-23 23:34:57 【问题描述】:

一个正经的 sql 人正在为 no-sql 苦苦挣扎:

我正在 mongodb 中为类似的查询寻找替代方法

select city, count(distinct device) from collection group by city, devicetype

我的收藏是这样的


"city":"city1",
"device": "device1"
"deviceType":1
,

"city":"city1",
"device": "device2"
"deviceType":0
,

"city":"city1",
"device": "device3"
"deviceType":1
,

"city":"city1",
"device": "device2"
"deviceType":0

分组后,我需要每个城市的devicetype 使用的不同设备

意思是,输出会是这样的


"city":"city1",
"deviceType":0,
"deviceCount":1     //device2
,

"city":"city1",
"deviceType":1,
"deviceCount":2     //device1, device3

我试过了

"$group": 
                _id:  "city": "$city", "devicetype": "$devicetype" ,
                "devicetype":  "$first": "$devicetype" ,
                "count":  "$sum": 1 
            

我得到的是设备的总数,而不是不同的计数。

请推荐!!

【问题讨论】:

***.com/questions/24761266/… 阅读最后一个答案。 【参考方案1】:

你可以使用下面的聚合

db.collection.aggregate([
   "$group": 
    _id: 
      "city": "$city",
      "deviceType": "$deviceType"
    ,
    "deviceCount":  "$addToSet": "$device" ,
    "count":  "$sum": 1 
  ,
   "$project": 
    "_id": 0,
    "city": "$_id.city",
    "deviceType": "$_id.deviceType",
    "deviceCount":  "$size": "$deviceCount" 
  
])

Output

[
  
    "city": "city1",
    "deviceCount": 1,
    "deviceType": 0
  ,
  
    "city": "city1",
    "deviceCount": 2,
    "deviceType": 1
  
]

【讨论】:

以上是关于在 mongodb 中计数不同而不给出不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

在访问报告中计数

MongoDB(PyMongo)分页具有不同的不给出一致的结果

MongoDB $geoNear 聚合管道(使用查询选项和使用 $match 管道操作)给出不同的结果

为什么在Hive中计数(明显)慢于group by?

练习2-18 求组合数(15 分)

Ruby:为啥 unpack('Q') 给出的结果与手动转换不同?