如何以mongodB将AggregateIterable <Document>值保存到地图?

时间:2019-12-29 07:06:29

标签: java mongodb aggregation-framework

我是MongoDB的新手。经过大量搜索之后,我应用了如下所示的汇总操作,并且可以正常运行:

AggregateIterable<Document> summary= collection.aggregate(
              Arrays.asList(
                      Aggregates.match(Filters.eq("financialEventType", "REFUND")),
                      Aggregates.group("_id",
                      Accumulators.sum("revenueHeader_Principal","$revenueHeader.Principal"),
                      Accumulators.sum("revenueHeader_ProductTax","$revenueHeader.Product Tax"),
                      Accumulators.sum("revenueHeader_Shipping","$revenueHeader.Shipping"),
                      Accumulators.sum("revenueHeader_ShippingTax","$revenueHeader.Shipping Tax"),
                      Accumulators.sum("revenueHeader_GiftWrap","$revenueHeader.Gift Wrap"),
                      Accumulators.sum("revenueHeader_GiftWrapTax","$revenueHeader.Gift Wrap Tax"),)
            )); 

LinkedHashMap<String, BigDecimal> revenueSummary = new LinkedHashMap<String, BigDecimal>();

现在,我想按特定顺序将这些值保存在RevenueSummary中。但是,如何遍历摘要或按名称访问项目?

1 个答案:

答案 0 :(得分:0)

您可以使用while语句进行迭代。
注意::如果有多个结果,则将保存最后个文档值。

MongoCursor<Document> iterator = summary.iterator();
while (iterator.hasNext()) {
    Document next = iterator.next();

    //Copy from Document key-value
    revenueSummary.put("Principal", (BigDecimal) next.get("revenueHeader_Principal"));
    revenueSummary.put("ProductTax", (BigDecimal) next.get("revenueHeader_ProductTax"));
    //...
}

LINK: https://www.programcreek.com/java-api-examples/index.php?api=com.mongodb.client.AggregateIterable