如何在MongoDB聚合框架中进行区分和分组?

时间:2014-03-29 19:07:36

标签: sql mongodb

我在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

3 个答案:

答案 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