-1

嗨,我是 MongoDB 的新手,我需要首先使用 MapReduce 方法和其他聚合方法中的两种技术将此 sql 查询转换为 mongodb。有人可以帮忙吗?

select
    sum(l_extendedprice*l_discount) as revenue
from 
    lineitem
where 
    l_shipdate >= date '1994-01-01'
    and l_shipdate < date '1994-01-01' + interval '1' year
    and l_discount between 0.06 - 0.01 and 0.06 + 0.01
    and l_quantity < 24;
4

1 回答 1

2

http://www.mongodb.org/display/DOCS/MapReduce

对于您的示例,使用 map/reduce

var m = function () { emit(1, {this.l_extendedprice * this.l_discount})};

var r = function (k, vals) {
    var sum = 0;
    for (var i = 0; i < vals.length; i++) {
       sum += vals[i];
    }
    return sum;
}

var res = db.stuff.mapReduce(m, r,  {
                            out:"stuff_aggr",
                            query: { 
                                "l_shipdate": {$gte:  ISODate("1994-01-01T00:00:00.000Z")}, 
                                "l_shipdate": {$lte:  ISODate("1995-01-01T00:00:00.000Z")},
                                "l_discount": {$gte: 0.05}, 
                                "l_discount": {$lte: 0.07}, 
                                "l_quantity": {$lt: 24}
                            }
});

聚合仍然是一个 beta 功能。MapReduce 仍然是更好的选择。我假设您想查看是否可以轻松处理复杂的 where 子句......只要您将自己限制在一个集合/表中,它与 SQL 并没有什么不同。

于 2012-07-05T13:37:24.610 回答