Dobra, to całkiem proste i musiałem tylko trochę oczyścić głowę, żeby to zauważyć. Złożone zapytanie można podzielić na obiekt Json.
JsonObject queryParam = new JsonObject()
.put("id", new JsonObject().put("$in", listOfIds)); // ArrayList<Long>
Mogę śmiało używać prostego zapytania wyszukiwania z tym queryParam.
mongoClient.find("collection", queryParam, asyncResult -> {
// do something
});