目前我正在使用Java开发项目,我需要使用Java运行JavaScript Mongo查询。我发现我可以使用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
});
答案 0 :(得分:1)
我建议您查看mongodb java driver以从Java运行查询。 Java驱动程序允许用Java直接与他们的mongodb数据库进行交互。因此,您可以将此代码移植到Java并使用Java完成所有操作,从而避免使用javascript或db.eval。如果您想进一步澄清,请告诉我。
答案 1 :(得分:0)
您还可以使用存储过程,您可以使用eval()
从java驱动程序中调用存储的函数一些细节:http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-and-pymongo.html
最近在v2.4中,对javascript操作进行了一些并发改进:http://docs.mongodb.org/manual/release-notes/2.4-javascript/