D'accord, c'est assez simple et j'avais juste besoin de me vider un peu la tête pour le remarquer. La requête complexe peut être décomposée en un objet Json.
JsonObject queryParam = new JsonObject()
.put("id", new JsonObject().put("$in", listOfIds)); // ArrayList<Long>
Je peux continuer et utiliser une requête de recherche simple avec ce queryParam.
mongoClient.find("collection", queryParam, asyncResult -> {
// do something
});