MongoDB明显聚合

Lem*_*nio 32 distinct mongodb

我正在学习mongoDB的作业,我正在研究查找每个州拉链最多的城市

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

查询的聚合部分似乎工作正常,但当我添加不同的我得到一个空结果.这是因为我在身份证上有州吗?我可以做一些像distinct("_ id.state ??或者你有其他任何提示吗?

谢谢!

dam*_*am1 79

您可以将$ addToSet与聚合框架一起使用来计算不同的对象.

例如:

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

  • 不是通用的解决方案,如果每个结果有大量唯一的邮政编码,这个数组会非常大.问题是为每个州提供MOST邮政编码,而不是获取实际的邮政编码.如果您有给定城市的10,000,000个邮政编码,会发生什么? (3认同)

Sam*_*aye 40

区别和聚合框架不可互操作.

相反,你只需要:

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'}}}
]);
Run Code Online (Sandbox Code Playgroud)

  • @ alex23 Distinct是一个完全不同的命令,它返回一组不同的值.它与聚合框架完全不兼容 (5认同)

小智 17

SQL查询:(分组和不同的计数)

select city,count(distinct(emailId)) from TransactionDetails group by city;
Run Code Online (Sandbox Code Playgroud)

等效的mongo查询看起来像这样:

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