我不知道我们如何可以从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;
我怎么能这样复杂的SQL使用count(),为了()和组()翻译成MongoDB的?
非常感谢你!
与设置的测试数据:
db.donors.insert({donorID:1,贡献:300,日期:ISODate( '1990年1月2日')})db.donors.insert({donorID:2,贡献:1000,日期:ISODate('1991 -03-03 ')})db.donors.insert({donorID:1,贡献:900,日期:ISODate(' 1992' 年1月2日)})
您可以使用新的聚合框架在MongoDB中2.2:
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
}
检查MongoDB的聚合
db.colection.group(
{key: { id:true},
reduce: function(obj,prev) { prev.sum += 1; },
initial: { sum: 0 }
});
之后,你得到的结果,通过排序它sum
。