Java 使用spring数据mongodb的组聚合
我试图使用date对象中的year值作为键来编写组聚合查询,但由于某种原因,我得到了这个异常Java 使用spring数据mongodb的组聚合,java,mongodb,spring-boot,spring-data-mongodb,Java,Mongodb,Spring Boot,Spring Data Mongodb,我试图使用date对象中的year值作为键来编写组聚合查询,但由于某种原因,我得到了这个异常 org.springframework.data.mapping.PropertyReferenceException: No property year(invoiceDate) 下面是我尝试复制的mongo查询: db.collection.aggregate([ { $match: { "status": "Active" } },
org.springframework.data.mapping.PropertyReferenceException: No property year(invoiceDate)
下面是我尝试复制的mongo查询:
db.collection.aggregate([
{
$match:
{
"status": "Active"
}
},
{
$group:
{
"_id":{$year:"$invoiceDate"}
}
},
{
$sort:
{
"_id" : -1
}
}
])
这是我的Java实现:
Aggregation aggregation = Aggregation.newAggregation(
match(new Criteria().andOperator(criteria())),
Aggregation.group("year(invoiceDate)")
).withOptions(newAggregationOptions().allowDiskUse(true).build());
我也没有找到一种方法来对分组结果应用排序。您基本上是在寻找映射到MongoDB运算符的
extractYear()
:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(new Criteria().andOperator(criteria())),
Aggregation.project().and("invoiceDate").extractYear().as("_id"),
Aggregation.group("_id"),
Aggregation.sort(Sort.Direction.DESC, "_id)
)
这通常需要进入一个阶段,以使助手感到高兴
如果确实希望表达式位于中,则可以添加自定义操作表达式:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(new Criteria().andOperator(criteria())),
new AggregationOperation() {
@Override
public Document toDocument(AggregationOperationContext aggregationOperationContext) {
return new Document("$group",
new Document("_id", new Document("$year","$invoiceDate") )
);
}
},
Aggregation.sort(Sort.Direction.DESC, "_id)
)
Aggregation.sort()
-为什么要调用它呢?我认为您需要在sort方法中提供一个引用,但您可能是对的。您知道SpEL表达式失败的原因吗?Aggregation.sort()
不起作用,我得到了您必须提供至少一个属性进行排序代码>对不起,这只是一个简短的评论,而我正在走开一段时间,并打算更多地作为一个“提示”来选择方法和发现选项。在下面添加了实际的管道翻译。在提供的答案中是否有您认为无法解决您的问题的内容?如果是,请对答案进行评论,以澄清哪些问题需要解决,哪些问题尚未解决。如果它确实回答了您提出的问题,那么请注意您提出的问题