我在MongoDB中有一个包含这些数据的集合:
sid; geo
--------
4; 100
4; 101
2; 100
2; 106
2; 107
1; 100
1; 100
1; 100
1; 110
1; 100
如何在MongoDB中进行此类SQL查询?
SELECT sid COUNT(DISTINCT geo) FROM sites GROUP BY sid
我希望每个sid都有一个包含唯一地理位置数的集合:
sid; geo_count
--------------
4; 2
2; 3
1; 2
答案 0 :(得分:1)
由于DISTINCT实际上是一种类型的组,您可以这样做:
db.c.aggregate({
{$group: {_id: '$geo', sid: '$sid', 'geo_sum': {$sum: 1}}},
{$group: {_id: '$sid', 'geo_count': {$sum: 1}}}
})
答案 1 :(得分:1)
Distinct确实是一种分组类型,但该类型查询的输出等效于:
db.collection.aggregate([
{ "$group": {
"_id": { "sid": "$sid", "geo": "$geo" }
}},
{ "$group": {
"_id": "$_id.sid",
"geo_count": { "$sum": 1 }
}}
]}
所以你需要先分组才能获得" distinct" " geo"的结果在" sid"。然后计算不同结果的数量。
答案 2 :(得分:0)
如果我理解你的问题,你应该能够通过做另一个来实现这个目标:
$ group