【发布时间】:2018-03-27 19:45:33
【问题描述】:
我最近开始使用 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 Driver 并使用以下代码
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();
但我知道总是使用 Native Driver 并不是一个好习惯,因为我们手头有 Spring-Data。但是我在使用 Spring Data 构建上述 MongoDB 查询到 AgrigationObject 时遇到了麻烦。我尝试了以下方法,但在构造 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)
如果我做错了什么,请指导我。
【问题讨论】:
标签: mongodb spring-boot spring-data spring-data-mongodb