No estás lejos de la solución:
La función agregada toma:.aggregate(List<DBObject>)
Pero el JSON.parse que desea usar le permite encasillarlo, si tiene una lista en su consulta, así que no hay problema
String query="[....}";
List<DBObject> q= (List<DBObject>)JSON.parse(query);
Iterable<DBObject> result=new MongoClient().getDatabase("db").getCollection("coll").aggregate(q).results();`
Los resultados se pueden repetir.