0
所以,我通過Maven使用MongoDB和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
我不知道如何繁殖和使用的。減去骨料級,任何想法?我真的被封鎖了:S 注意我在集合中使用了更多的文檔。 這就是我用聚合框架所做的。
MongoCollection<Document> ordersCollection = database.getCollection("orders");
ordersCollection.aggregate(
Arrays.asList(
Aggregates.unwind("$lineitems"),
Aggregates.match(Filters.lte("lineitems.shipdate", 10)),
Aggregates.group("$lineitems.linestatus",
Accumulators.sum("sum_qty", "$lineitems.quantity"),
Accumulators.sum("sum_base_price", "$lineitems.extendedPrice"))
)
).forEach(printBlock);
看起來你可以建立一個原始文檔時使用的表達式。如「使用聚合表達式」部分[此處](http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/aggregation/)中所述。然後你可以使用[這些表達式](https://docs.mongodb.com/manual/reference/operator/aggregation/#expression-operators)中的任何一個來進行加法,減法,乘法等等。看起來你也可能能夠使用'new Document'作爲'group'的第一個參數,以便通過'lineitems.linestatus'和'lineitems.returnflag'對其進行分組。 –