Skip to content

Commit 1dba3a9

Browse files
committed
add the java aggregation pipeline
1 parent d60839a commit 1dba3a9

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.mongodb.quickstart;
2+
3+
import com.mongodb.client.*;
4+
import org.bson.Document;
5+
import org.bson.conversions.Bson;
6+
import org.bson.json.JsonWriterSettings;
7+
8+
import java.util.ArrayList;
9+
import java.util.Arrays;
10+
import java.util.function.Consumer;
11+
import java.util.logging.Level;
12+
import java.util.logging.Logger;
13+
14+
import static com.mongodb.client.model.Accumulators.push;
15+
import static com.mongodb.client.model.Accumulators.sum;
16+
import static com.mongodb.client.model.Aggregates.*;
17+
import static com.mongodb.client.model.Filters.eq;
18+
import static com.mongodb.client.model.Projections.*;
19+
import static com.mongodb.client.model.Sorts.descending;
20+
21+
public class AggregationFramework {
22+
23+
public static void main(String[] args) {
24+
Logger.getLogger("org.mongodb.driver").setLevel(Level.WARNING);
25+
String connectionString = System.getProperty("mongodb.uri");
26+
try (MongoClient mongoClient = MongoClients.create(connectionString)) {
27+
MongoDatabase db = mongoClient.getDatabase("sample_training");
28+
MongoCollection<Document> zips = db.getCollection("zips");
29+
MongoCollection<Document> posts = db.getCollection("posts");
30+
threeMostPopulatedCitiesInTexas(zips);
31+
threeMostPopularTags(posts);
32+
}
33+
}
34+
35+
/**
36+
* find the 3 most densely populated cities in Texas.
37+
* @param zips sample_training.zips collection from the MongoDB Sample Dataset in MongoDB Atlas.
38+
*/
39+
private static void threeMostPopulatedCitiesInTexas(MongoCollection<Document> zips) {
40+
Bson match = match(eq("state", "TX"));
41+
Bson group = group("$city", sum("totalPop", "$pop"));
42+
Bson project = project(fields(excludeId(), include("totalPop"), computed("city", "$_id")));
43+
Bson sort = sort(descending("totalPop"));
44+
45+
ArrayList<Document> results = zips.aggregate(Arrays.asList(match, group, project, sort, limit(3)))
46+
.into(new ArrayList<>());
47+
System.out.println("==> 3 most densely populated cities in Texas");
48+
results.forEach(printDocuments());
49+
}
50+
51+
/**
52+
* find the 3 most popular tags and their post titles
53+
* @param posts sample_training.posts collection from the MongoDB Sample Dataset in MongoDB Atlas.
54+
*/
55+
private static void threeMostPopularTags(MongoCollection<Document> posts) {
56+
Bson unwind = unwind("$tags");
57+
Bson group = group("$tags", sum("count", 1L), push("titles", "$title"));
58+
Bson sort = sort(descending("count"));
59+
Bson project = project(fields(excludeId(), computed("tag", "$_id"), include("count", "titles")));
60+
61+
ArrayList<Document> results = posts.aggregate(Arrays.asList(unwind, group, sort, limit(3), project)).into(new ArrayList<>());
62+
System.out.println("==> 3 most popular tags and their posts titles");
63+
results.forEach(printDocuments());
64+
}
65+
66+
private static Consumer<Document> printDocuments() {
67+
return doc -> System.out.println(doc.toJson(JsonWriterSettings.builder().indent(true).build()));
68+
}
69+
}

0 commit comments

Comments
 (0)