Reputation: 5469
I am using the Java MongoDB driver v4.3:
implementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '4.3.1'
implementation group: 'org.mongodb', name: 'bson', version: '4.3.1'
I have my aggregation pipelines written in JSON files which are placed in the src/main/resources
folder. The aggregate
function only accepts a List<Bson>
. After fetching the file, how do I pass it into the MongoDB method?
String fileName = "physics/test.json";
File file = new File(fileName);
MongoDatabase db = mongoClient.getDatabase(DATABASE_NAME);
MongoCollection collection = db.getCollection(collectionName);
// Convert file to List<Bson> ???
AggregateIterable sourceList = collection.aggregate(pipeline);
Upvotes: 0
Views: 1579
Reputation: 5469
This is how you do it:
import org.bson.json.JsonObject;
// ...
String json = """
[{"$group":{"_id":{"segment":"$segment","invoice_id":{"$trim":{"input":"$invoice_id"}}},"qty":{"$sum":"$qty"}}}]""";
List<BsonDocument> pipeline = new BsonArrayCodec().decode(new JsonReader(json), DecoderContext.builder().build())
.stream().map(BsonValue::asDocument)
.collect(Collectors.toList());
MongoClient client = new MongoClient();
List<JsonObject> results = client.getDatabase("test").getCollection("test").withDocumentClass(JsonObject.class)
.aggregate(pipeline).into(new ArrayList<>());
for (JsonObject cur: results) {
System.out.println(cur.getJson());
}
Upvotes: 1