【问题标题】:sql to mongodb translationsql到mongodb的翻译
【发布时间】:2012-08-30 03:00:48
【问题描述】:

我想知道我们如何进行以下从 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?

非常感谢!

【问题讨论】:

  • 接受答案...或者如果某些内容不适合您,请提供信息..

标签: sql mongodb language-translation


【解决方案1】:

设置测试数据:

db.donors.insert({donorID:1,contribution:300,date:ISODate('1990-01-02')}) db.donors.insert({donorID:2,contribution:1000,date:ISODate('1991-03-03')}) db.donors.insert({donorID:1,contribution:900,date:ISODate('1992-01-02')})

您可以在 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
}

【讨论】:

    【解决方案2】:

    查看mongodb Aggregation

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

    得到结果后,按sum排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-08
      • 2011-12-23
      • 2010-09-07
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2017-09-19
      • 2015-11-16
      相关资源
      最近更新 更多