I\'m developing Spring Boot and Spring Data Mongo
example. In this example, I want to get the distinct departments only, but I dont want to fecth subdepartments
The aggregation gets the distinct departments.deptCd
values (plus other details):
db.collection.aggregate( [
{
$group: { _id: "$departments.deptCd",
deptName: { $first: "$departments.deptName" },
status: { $first: "$departments.status" }
}
},
{
$project: { deptCd: "$_id", _id: 0, deptName: 1, status: 1 }
}
] )
The output:
{ "deptName" : "Tax Handling Dept", "status" : "A", "deptCd" : "Tax" }
Code using Spring Data MongoDB v2.2.7:
MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "testdb");
Aggregation agg = Aggregation.newAggregation(
Aggregation.group("departments.deptCd")
.first("departments.deptName").as("deptName")
.first("departments.status").as("status"),
Aggregation.project("deptName", "status")
.and("_id").as("deptCd")
.andExclude("_id")
);
AggregationResults results = mongoOps.aggregate(agg, "collection", Document.class);
results.forEach(System.out::println);