3
私はmongoDBでこのクエリを実行し、結果が得られます。しかし今、私はそれをjavaで使用しようとしています。Javaで.group()を実行する方法
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.lineitems.group({
key : { returnflag : true, linestatus : true},
cond : { "shipdate" : {$lte: 19980801}},
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
});
そして今、私はJavaでそれを使用していますが、私は平均機能を使用する方法がわからない方法:
これは、MongoDBのでクエリです。
String avg = "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;};";
String reduce = "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;};";
String finalize = "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;};";
MapReduceIterable<Document> iterable = collection.mapReduce(**????**, reduce).finalizeFunction(finalize);
どうすればこの機能を使用できますか?
ようなものになるだろうという翻訳
私は知っているが、私は集約フレームワークを使用してソリューションを持っていると私はマップと同じ結果を必要とするが、比較するために減らす...私が呼び出すためのJavaを使用する必要があります両方の場合。 – duknust
@duknustなぜmapReduceが必要だと思いますか?ここでの説明は、 '.aggregate()'を使うほうが簡単であるだけでなく、実際には** far **よりも優れていることを示しています。 mapReduceが '.aggregate()'で性能や規模を競うことはできません。また、Javaコードも入手できます。あなたのコメントはあなたが答えを完全に読んでいないことを示唆しています。私はあなたがして、レッスンを学ぶことをお勧めします。 –
@duknustもちろん、もう一つのことは、コード化された関数とシェルで試したものが['.group()'](https://docs.mongodb.org/manual/reference/method)であることです。 /db.collection.group/)メソッドを使用します。したがって、JavaScriptコードでさえ、あなたがすでにコード化したものから 'mapReduce'に合うようにかなりの変更が必要になります。ですから、Javaで '.group()'を呼び出すか、 'mapReduce'のすべてのコードを変更します。しかし、一般的な要約は、あなたがこれを行うべきではないということです。図示のように '.aggregate()'を使用してください。はるかに良いです。これはあなたがここで学ぶことを意味しているものです。 –