Уникальная агрегация MongoDB - программирование

Уникальная агрегация MongoDB

Я работаю над запросом, чтобы найти города с наибольшим количеством почтовых индексов для каждого штата:

db.zips.distinct("state", db.zips.aggregate([ {$group:{_id:{state:"$state", city:"$city"},numberOfzipcodes:{$sum:1}}}, {$sort:{numberOfzipcodes:-1}}]))

Агрегированная часть запроса, кажется, работает нормально, но когда я добавляю отличительные, я получаю пустой результат.

Это потому что у меня есть штат в id? Могу ли я сделать что-то похожее distinct("_id.state?"

4b9b3361

Ответ 1

Отличие и структура агрегации не являются взаимоисключаемыми.

Вместо этого вы просто хотите:

db.zips.aggregate([ 
    {$group:{_id:{city:'$city', state:'$state'}, numberOfzipcodes:{$sum:1}}}, 
    {$sort:{numberOfzipcodes:-1}},
    {$group:{_id:'$_id.state', city:{$first:'$_id.city'}, 
              numberOfzipcode:{$first:'$numberOfzipcodes'}}}
]);

Ответ 2

Вы можете использовать $addToSet с помощью структуры агрегации для подсчета различных объектов.

Например:

db.collectionName.aggregate([{
    $group: {_id: null, uniqueValues: {$addToSet: "$fieldName"}}
}])

Ответ 3

SQL Query: (по группам и количеству отдельных)

select city,count(distinct(emailId)) from TransactionDetails group by city;

Эквивалентный запрос mongo будет выглядеть следующим образом:

db.TransactionDetails.aggregate([ 
{$group:{_id:{"CITY" : "$cityName"},uniqueCount: {$addToSet: "$emailId"}}},
{$project:{"CITY":1,uniqueCustomerCount:{$size:"$uniqueCount"}} } 
]);