De acuerdo, es bastante sencillo y solo necesitaba despejar mi cabeza un poco para darme cuenta de eso. La consulta compleja se puede dividir en un objeto Json.
JsonObject queryParam = new JsonObject()
.put("id", new JsonObject().put("$in", listOfIds)); // ArrayList<Long>
Puedo continuar y usar una consulta de búsqueda simple con este queryParam.
mongoClient.find("collection", queryParam, asyncResult -> {
// do something
});