Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Mongo DB中的聚合类进行乘法_Java_Mongodb_Aggregation Framework - Fatal编程技术网

Java 使用Mongo DB中的聚合类进行乘法

Java 使用Mongo DB中的聚合类进行乘法,java,mongodb,aggregation-framework,Java,Mongodb,Aggregation Framework,因此,我通过Maven在Java上使用MongoDB,并使用用于选择的聚合框架。我在托收单上有此文件: { "_id" : "orderKey0", "orderdate" : 3, "shippriority" : 0, "customer" : { "nationKey" : "nationKey0", "mktsegment" : "mktsegment0" },

因此,我通过Maven在Java上使用MongoDB,并使用用于选择的聚合框架。我在托收单上有此文件:

{ 
      "_id" : "orderKey0", 
      "orderdate" : 3, 
      "shippriority" : 0, 
      "customer" : { 
          "nationKey" : "nationKey0", 
          "mktsegment" : "mktsegment0" 
       }, 
      "lineitems" : { 
          "suppkey" : "suppkey1", 
          "quantity" : 9, 
          "extendedPrice" : 45, 
          "discount" : 18, 
          "tax" : 0, 
          "returnflag" : "b", 
          "linestatus" : "c", 
          "shipdate" : 4, 
          "shipingdate" : 1 
       } 
   }
我需要这样做选择:

SELECT sum(quantity) as sum_qty,
sum(extendedprice) as sum_base_price, sum(l_extendedprice*(1-l_discount)) as
sum_disc_price
FROM *
WHERE shipdate <= '[date]'
GROUP BY returnflag, linestatus
选择总和(数量)作为总和数量,
总和(扩展价格)作为总和\基本\价格,总和(l \扩展价格*(1-l \折扣))作为
总价
从*

其中shipdate可以使用表达式创建嵌套的算术计算

像下面这样

 Document groupFields = new Document();
 groupFields.append("linestatus", "$lineitems.linestatus");
 groupFields.append("returnflag", "$lineitems.returnflag");

 Document subtractDisc = new Document("$subtract", Arrays.asList(1, "$lineitems.discount"));
 Document multiplyDisc = new Document("$multiply", Arrays.asList("$lineitems.extendedPrice", subtractDisc));

ordersCollection.aggregate(
                Arrays.asList(
                        Aggregates.unwind("$lineitems"),
                        Aggregates.match(Filters.lte("lineitems.shipdate", 10)),
                        Aggregates.group(groupFields,
                                Accumulators.sum("sum_qty", "$lineitems.quantity"),
                                Accumulators.sum("sum_base_price", "$lineitems.extendedPrice"),
                                Accumulators.sum("sum_disc_price", multiplyDisc)
                          )
                        )
  ).forEach(printBlock);

看起来您可以构建一个原始文档来使用表达式。如“使用聚合表达式”部分所述。然后,您可以使用其中的任何一个进行加法、减法、乘法等操作。看起来您还可以使用
新文档
作为
分组
的第一个参数,以将其按
行项目.linestatus
行项目.returnflag
进行分组。
 Document groupFields = new Document();
 groupFields.append("linestatus", "$lineitems.linestatus");
 groupFields.append("returnflag", "$lineitems.returnflag");

 Document subtractDisc = new Document("$subtract", Arrays.asList(1, "$lineitems.discount"));
 Document multiplyDisc = new Document("$multiply", Arrays.asList("$lineitems.extendedPrice", subtractDisc));

ordersCollection.aggregate(
                Arrays.asList(
                        Aggregates.unwind("$lineitems"),
                        Aggregates.match(Filters.lte("lineitems.shipdate", 10)),
                        Aggregates.group(groupFields,
                                Accumulators.sum("sum_qty", "$lineitems.quantity"),
                                Accumulators.sum("sum_base_price", "$lineitems.extendedPrice"),
                                Accumulators.sum("sum_disc_price", multiplyDisc)
                          )
                        )
  ).forEach(printBlock);