投影汇总

时间:2018-12-08 21:09:16

标签: java mongodb aggregation-framework

尽管我不了解如何实现目标,但还是通过多种聚合方法进行搜索。以下代码的AggregateIterable中包含的文档仅包含_id中提到的2个字段copiesAggregates.group(...)。我还将如何包括字段field1field2

AggregateIterable<Document> items = itemCollection.aggregate(Arrays.asList(
    Aggregates.project(include("_id","field1","field2")),
    Aggregates.group("$_id",Accumulators.sum("copies",1)),
    Aggregates.sort(descending("field1")))
);

我无所适从,因为我似乎找不到(或至少理解)任何例子。任何帮助将不胜感激,特别是我希望如何做的一个例子。

2 个答案:

答案 0 :(得分:1)

mongo中的$ group agg函数要求您还使用对组友好的转换来显式包括所有输出列。如果您想让贫民窟在某些领域通行,我相信可以使用$ first运算符。

它与包含对象的c#linq group()函数不同。如果需要该功能(键的值集合中有许多不匹配的对象),则必须先实例化结果,然后使用标准的linq group函数。

答案 1 :(得分:0)

以下是使用first()运算符进行工作的示例。

AggregateIterable<Document> items = Main.itemCollection.aggregate(Arrays.asList(
    Aggregates.project(fields(include("field1","field2"),excludeId())),
    Aggregates.group(
        "$field1",
        first("field2","$field2r")
        Accumulators.sum("Copies",1)
    ),
    Aggregates.sort(descending("_id"))
));