0

I am new to Java. I checked few examples having aggregate usage.But still having few doubt.

 db.employee.aggregate({$unwind: '$dp.fin.Record'},       
 {$match:{"dp.mon":"patch.metrics",'dp.fin.Record':{$exists:1}}},      
 {$group:{_id: '$dp.fin.Record', count:{$sum:1}}},      
 {$project:{count:'$count'}},   {$group:{_id:'Total
 Count',total:{$sum:'$count'}}});

Can anybody help me writing java equivalent. I have doubt how can we pass multiple matching condition as I have shown above. I am trying like below

BasicDBObject unwind = new BasicDBObject("$unwind",
"$dp.fin.Record"); DBObject match = new BasicDBObject("$match", new
BasicDBObjectBuilder(""));

2 Answers 2

3

I think this will help:

DBObject unwind = new BasicDBObject("$unwind", "$dp.fin.Record");
DBObject match  = BasicDBObjectBuilder.start().push("$match")
                  .add("dp.mon", "patch.metrics")
                  .push("dp.fin.Record").add("$exists", true).get();
DBObject group1 = BasicDBObjectBuilder.start().push("$group")
                  .add("_id", "$dp.fin.Record")
                  .push("count").add("$sum", 1).get();
DBObject project= BasicDBObjectBuilder.start().push("$project")
                  .add("count", "$count").get();
DBObject group2 = BasicDBObjectBuilder.start().push("$group")
                  .add("_id", "Total Count")
                  .push("total").add("$sum", "$count").get();
// Suppose collection has been prepared
AggregationOutput aggr = collection.aggregate(Arrays.asList(unwind, match, group1, project, group2));
Sign up to request clarification or add additional context in comments.

Comments

3

If you above query is correct. You could approach this below codes.

//Forming Unwind parts
DBObject unwind = new BasicObject("$unwind","$dp.fin.record");

//Forming Match parts
DBObject match = new BasicObject();
match.put("dp.mon","patch.metrics")
match.put("dp.fin.Record", new BasicDBObject("$exists",1));

//Forming Group parts
DBObject group1 = new BasicDBObject();
group1.put("_id", '$dp.fin.Record');
group1.put("count", new BasicDBObject("$sum", 1));

//Forming Project parts
DBObject project = new BasicDBObject();
project.put("count", '$count');

//Forming Group parts
DBObject group2 = new BasicDBObject();
group2.put("_id", 'Total Count');
group2.put("total", new BasicDBObject('$sum', '$count'));


/**
 * Executing aggregation 
 */
AggregationOutput output = mongoOperations.getCollection("employee").aggregate(unwind,
                                                                            new BasicDBObject("$match",match),
                                                                            new BasicDBObject("$group",group1),
                                                                            new BasicDBObject("$project",project),
                                                                            new BasicDBObject("$group",group2));

Hope this could help you.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.