Подсчет в mongodb не дает четких результатов - PullRequest
0 голосов
/ 21 ноября 2018

правильный парень 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 }
            }

Я получаю общее количество устройств, а не различное количество.

пожалуйста, предложите !!

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать ниже агрегации

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" }
  }}
])

Выход

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