我將下面的sql查詢翻譯成mongodb的map reduce查詢。MongoDB中如何寫入sql子句?
select
o_orderpriority,
count(*) as order_count
from
orders
where
o_orderdate >= date '1993-07-01'
and o_orderdate < date '1993-07-01' + interval '3' month
and exists (
select
*
from
lineitem
where
l_orderkey = o_orderkey
and l_commitdate < l_receiptdate
)
group by
o_orderpriority
order by
o_orderpriority;
而下面的地圖查詢降低:
db.runCommand({
mapreduce: "orders",
query: {
o_orderdate: {'$gte': new Date("July 01, 1993")},
o_orderdate: {'$lt': new Date("Oct 01, 1993")}
},
map: function Map() {
for(var i in this.o_lineitem) {
if(this.o_lineitem[i].l_commitdate < this.o_lineitem[i].l_receiptdate) {
emit(this.o_orderpriority, 1);
}
}
},
reduce: function(key, values) {
var count = 0;
for (var i = 0; i < values.length; i++) {
count += values[i];
}
return count;
},
out: 'query004'
});
外觀,o_linetem在訂單採集的嵌入式陣列。
那麼結果是:
在SQL:
1-URGENT 10594
2-HIGH 10476
3-MEDIUM 10410
4-NOT SPECIFIED 10556
5-LOW 10487
在對方MongoDB的結果:
{ "_id" : "1-URGENT", "value" : 29215 }
{ "_id" : "2-HIGH", "value" : 29020 }
{ "_id" : "3-MEDIUM", "value" : 28616 }
{ "_id" : "4-NOT SPECIFIED", "value" : 29253 }
{ "_id" : "5-LOW", "value" : 28765 }
發生什麼事?我在地圖縮減中做了什麼錯誤?
$退出?我不完全確定你的SQL在做什麼,但我會試着弄明白。 – ranman 2012-08-14 19:54:43