gpt4 book ai didi

java - Java Spring 中是否可以进行条件聚合?

转载 作者:行者123 更新时间:2023-11-30 01:48:43 25 4
gpt4 key购买 nike

我正在使用 Spring 和 MongoDB 以及 MongoTemplate。

我有这个文档:

{
price: 50.0,
goal: {
currentValue: 20,
goal: 100
}
}

我需要执行一个查询,例如“为我提供当前值与目标相同的值”或“为我提供当前值为 50% 的文档”其目标”。

可以这样做吗?到目前为止,我一直在执行此类查询,但从未执行过使用文档当前值作为条件一部分的条件查询。

Criteria criteria = Criteria.where("price").exists(true);

GroupOperation totalAggregation = group()
.sum("goal.currentValue")
.as("currentValue")
.sum("goal.goal")
.as("goal");
UnwindOperation unwind = unwind("$goal");
Aggregation aggregation = newAggregation(match(criteria), unwind, totalAggregation);

AggregationResults<Document> results = mongoTemplate
.aggregate(aggregation,"Goals", Document.class);

现在我只想带来那些符合我上面描述的场景的。如何做到这一点?

谢谢。

最佳答案

由于您可以使用 MongoDB 4.0.1,因此您可以使用 $expr 来获得所需的结果。

所需的查询将如下所示:

db.criteria.find( { $expr: { $eq: [ "$goal.currentValue" , "$goal.goal" ] } } )

或者,如果您需要当前值作为目标的 50%

db.criteria.find( { $expr: { $eq: [ "$goal.currentValue" , {divide : ["$goal.goal",2]} ] } } )

我不了解 Spring,也不知道 mongodb 如何与 Spring 一起使用,这就是为什么我在 Mongo Shell 中给出答案。您可以在 Spring MongoTemplate 中编写语法。这个想法是使用 $expr 在匹配条件下使用文档字段。

有关更多信息,请阅读 MongoDB official $expr documentation .

更新:

相同的 MongoTemplate 语法可能如下所示(未经测试):

BasicQuery query1 = new BasicQuery("{ $expr: { $eq: [ '$goal.currentValue' , '$goal.goal' ] } }");
List<Document> = mongoOperation.find(query1, Document.class);

尝试一下,并告诉我上面的查询是否有错误。我只是尝试用您所需的语法编写它。

关于java - Java Spring 中是否可以进行条件聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56847687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com