Pro verzi Mongo Java 2.13 můžete použít níže uvedený agregační dotaz. Některé operace jsem zjednodušil.
List<DBObject> aggregates = Arrays.asList(new BasicDBObject("$project", new BasicDBObject("dt", "$dt").
append("mc", "$mc").
append("uplift", "$uplift").
append("baseAvg", "$baseAvg").
append("baseUp", new BasicDBObject("$add", Arrays.<Object>asList("$uplift", "$baseAvg"))).
append("share", new BasicDBObject("$cond", Arrays.<Object>asList(new BasicDBObject("$eq", Arrays.<Object>asList("$baseAvg", 0)),
0, new BasicDBObject("$divide", Arrays.<Object>asList("$uplift", "$baseAvg")))))));
Pro verzi 3.x můžete použít níže uvedenou agregaci.
MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("db");
MongoCollection<Document> collection = db.getCollection("collection");
Bson aggregates = Aggregates.project(Projections.fields(Projections.include("dt", "mc", "uplift","baseAvg"),
new Document("baseUp", new Document("$add", Arrays.<Object>asList("$uplift", "$baseAvg"))),
new Document("share", new Document("$cond", Arrays.<Object>asList(new Document("$eq", Arrays.<Object>asList("$baseAvg", 0)),
0, new Document("$divide", Arrays.<Object>asList("$uplift", "$baseAvg")))))));
List<Document> results = collection.aggregate(Arrays.asList(aggregates)).into(new ArrayList<>());