Nie jesteś daleko od rozwiązania:
Funkcja agregująca przyjmuje:.aggregate(List<DBObject>)
Ale JSON.parse, którego chcesz użyć, pozwala ci na typowanie do niego, jeśli masz listę w zapytaniu, więc nie ma problemu
String query="[....}";
List<DBObject> q= (List<DBObject>)JSON.parse(query);
Iterable<DBObject> result=new MongoClient().getDatabase("db").getCollection("coll").aggregate(q).results();`
Wyniki można następnie powtarzać.