我想知道如何从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?
非常感谢!
答案 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)
db.colection.group(
{key: { id:true},
reduce: function(obj,prev) { prev.sum += 1; },
initial: { sum: 0 }
});
获得结果后,按sum
对其进行排序。