gpt4 book ai didi

mongodb - 在 spring 中创建过滤器聚合

转载 作者:可可西里 更新时间:2023-11-01 09:57:39 28 4
gpt4 key购买 nike


我最近开始使用 SpringData 探索 MongoDB 中的聚合框架。我可以创建以下查询,即

db.consumer_order.aggregate([
{ $match: {_id: ObjectId("59e43f542397a00de0c688e4"), "orderState":"Confirmed"}},
{ $project: {
parts: {$filter: {
input: '$parts',
as: 'item',
cond: {$eq: ['$$item.currentState', "Estimation Confirmed"]}
}}
}}
])

使用以下代码在 Spring 中使用 MongoDB native 驱动程序

List<Document> aggrigationList = new ArrayList<>();

List<String> conditions = new ArrayList<>();
conditions.add("$$item.currentState");
conditions.add("Estimation Confirmed");

Document matchDoc = new Document("$match",new Document("_id",new ObjectId(orderId)));
Document projectDoc = new Document("$project",new Document("parts",new Document("$filter",new Document("input","$parts").append("as", "item").append("cond", new Document("$eq",conditions)))));
aggrigationList.add(matchDoc);
aggrigationList.add(projectDoc);

Document orderWithPendingParts = consumerOrderCollection.aggregate(aggrigationList).first();

但我确实知道,由于我们手头有 Spring-Data,因此始终使用 Native Driver 并不是一个好习惯。但是我在使用 Spring Data 构建对 AggrigationObject 的上述 MongoDB 查询时遇到了麻烦。我尝试了以下内容,但在构建 Aggregation.project()

时发现困难
mongoTemplate.aggregate(Aggregation.newAggregation(
Aggregation.match(Criteria.where("owner").is(user).andOperator(Criteria.where("orderState").is("confirmed"))),
***Finding Difficulty in here***
), inputType, outputType)

指导我,如果我做错了什么。

最佳答案

您可以尝试以下查询。

静态导入

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
import static org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.filter;
import static org.springframework.data.mongodb.core.aggregation.ComparisonOperators.Eq.valueOf;

代码

Aggregation aggregation = newAggregation(
project().and(filter("parts")
.as("item")
.by(valueOf(
"item.currentState")
.equalToValue(
"Estimation Confirmed")))
.as("parts");
);

List<outputType> results = mongoTemplate.aggregate(aggregation, inputType, outputType)

关于mongodb - 在 spring 中创建过滤器聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46767750/

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