sql到mongodb的翻译

时间:2012-08-30 03:00:49

标签: sql mongodb language-translation

我想知道如何从sql到mongoDB进行以下翻译:

假设该表具有以下结构:

table
=====
-----
##id contribution         time

1            300                  Jan 2, 1990

2            1000                 March 3, 1991

我想按照贡献数量的降序找到ID的排名列表。

'$'这是我用sql做的:

select id, count(*) c from table group by id order by c desc;

如何使用count(),order()和group()将这个复杂的sql翻译成mongoDB?

非常感谢!

2 个答案:

答案 0 :(得分:4)

使用以下方式设置测试数据:

  

db.donors.insert({donorID:1,贡献:300,日期:ISODate( '1990年1月2日')})   db.donors.insert({donorID:2,贡献:1000,日期:ISODate( '1991年3月3日')})   db.donors.insert({donorID:1,贡献:900,日期:ISODate( '1992年1月2日')})

您可以在MongoDB 2.2中使用新的Aggregation Framework

db.donors.aggregate(
    { $group: {
        _id: "$donorID",
        total:   { $sum: "$contribution" },         
        donations: { $sum: 1 }
    }},
    { $sort: {
        donations: -1
    }}
)

产生预期结果:

{
    "result" : [
        {
            "_id" : 1,
            "total" : 1200,
            "donations" : 2
        },
        {
            "_id" : 2,
            "total" : 1000,
            "donations" : 1
        }
    ],
    "ok" : 1
}

答案 1 :(得分:2)

检查mongodb Aggregation

db.colection.group(
  {key: { id:true},
  reduce: function(obj,prev) { prev.sum += 1; },
  initial: { sum: 0 }
});

获得结果后,按sum对其进行排序。