Crear agregación de filtros en primavera
Recientemente comencé a explorar Aggregation Framework en MongoDB con SpringData. Podría crear la siguiente consulta, es decir
db.consumer_order.aggregate([
{ $match: {_id: ObjectId("59e43f542397a00de0c688e4"), "orderState":"Confirmed"}},
{ $project: {
parts: {$filter: {
input: '$parts',
as: 'item',
cond: {$eq: ['$item.currentState', "Estimation Confirmed"]}
}}
}}
])
con el controlador nativo MongoDB en Spring con el siguiente código
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();
Pero sí sé que no es una buena práctica trabajar siempre con Native Driver ya que tenemos Spring-Data en la mano. Pero tengo problemas para construir la consulta MongoDB anterior a AggrigationObject Using Spring Data. Intenté con lo siguiente, pero encuentro dificultades para construirAggregation.project () es decir
mongoTemplate.aggregate(Aggregation.newAggregation(
Aggregation.match(Criteria.where("owner").is(user).andOperator(Criteria.where("orderState").is("confirmed"))),
***Finding Difficulty in here***
), inputType, outputType)
Guíame, si estoy haciendo algo mal.