0

我是 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>();

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

4

1 回答 1

0

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

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"));
    //...
}

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

于 2019-12-29T12:17:23.723 回答