【发布时间】:2013-04-26 15:04:11
【问题描述】:
目前我正在用 JAVA 开发一个项目,我需要通过 JAVA 运行 Javascript Mongo 查询,我想我可以在 java 中使用 db.eval() 来做类似的事情。问题是我对 Mongo 有以下 Javascript 查询,但我不知道如何将整个脚本传递给 db.eval() 方法。任何的想法 ?请告诉我。 谢谢你
var red = function(doc, out) {
out.count_order++;
out.sum_qty += doc.quantity;
out.sum_base_price += doc.extendedprice;
out.sum_disc_price += doc.extendedprice * (1 - doc.discount);
out.sum_charge += doc.extendedprice * (1 - doc.discount) * (1 + doc.tax);
out.avg_disc += doc.discount
};
var avg = function(out) {
out.avg_qty = out.sum_qty / out.count_order;
out.avg_price = out.sum_base_price / out.count_order;
out.avg_disc = out.avg_disc / out.count_order
};
db.deals.group( {
key : { RETURNFLAG : true, LINESTATUS : true},
cond : { "SHIPDATE" : {$lte: new Date(1998, 8, 1)}},
initial: { count_order : 0, sum_qty : 0, sum_base_price : 0, sum_disc_price : 0,
sum_charge : 0, avg_disc : 0},
reduce : red,
finalize : avg
});
【问题讨论】:
-
为什么需要将此作为脚本传递?为什么不使用 mongodb java 驱动程序并将这些作为普通查询/命令/等执行?
-
补充一点,我认为 JS 引擎在这里不会给你带来任何好处,事实上它可能(可能)会带来更多的坏处
-
实际上我正在研究 TPC-H 基准测试,我正在尝试比较不同 DBMS 的原始查询的查询响应时间和网络延迟,其中 MongoDB 就是其中之一,这些原始查询由基准定义,我不知道如何将它们转换为使用 MongoDB java 驱动程序。当我在 db.eval() 中尝试简单的 javascript 查询时,它能够运行它们,但是当我尝试使用整个脚本时出现异常。
-
另外我没有太多时间将所有这些原始查询转换为 Mongodb Java 驱动程序格式,因为我有 27 个复杂查询,我必须尽快得到结果。
标签: java mongodb mongodb-query mongodb-java