java - MongoDB聚合Spring/Java(带有数组、分组和匹配的项目)

标签 java spring mongodb

我在使用 springframework 在 Java 中编写该查询时遇到问题。

db.getCollection('fish').aggregate(
        {$match : {"uploadDate" : { $gte : new ISODate("2017-05-22T00:00:00Z"), $lte : new ISODate("2017-05-25T00:00:00Z") }}},
        {$group: {_id: {lake : "$lake", type : "$type"}, count: {$sum: 1}}} ,
        {$project: {array : ["$_id.type" , "$count"], count : "$count"}},
        {$group: {_id: {lake : "$_id.lake"}, count: {$sum: 1}, types : {$addToSet : "$array"}}})

我能够编写匹配和分组,但在添加包含 id.type 和 count 的数组的项目时遇到问题。到目前为止我能够写这个

Aggregation aggregation = newAggregation(match(Criteria.where("uploadDate").gte(created).lte(newCreatedDate)),
        group("lake").count().as("values"));

我找不到任何解决方案如何编写它,我只看到您可以将字段/字符串添加到 project()

最佳答案

我会给你替代方案,因为确实没有办法按照你想要的方式创建表达式。

您必须使用AggregationOperation并使用BasicDBObject来创建project阶段。

类似于

AggregationOperation project = aggregationOperationContext -> new BasicDBObject("$project", new BasicDBObject("array", Arrays.asList("$_id.type" , "$count")).append("count", "$count"));

关于java - MongoDB聚合Spring/Java(带有数组、分组和匹配的项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44165812/

相关文章:

java - 有没有办法使用 for 循环获取 RES > value > strings.xml 项值?

Java 泛型通配符扩展最终类

java - 我不能将 @Value 注释与 @Transient 注释一起使用吗?

java - 将 request 属性从 request 注入(inject)到 spring Controller 方法中

mysql - 如何在 Meteor 中处理关系数据?

Python 和 mongoDB 连接池(pymongo)

java - libGDX:ClickListener 中的延迟

java - 如何编写跨越 xsd :any element? 的 XQuery

Spring MVC 使用表单 :checkbox to bind data

javascript - 数组推送在 toArray 函数内部不起作用使用 mongoDB