Ok, é bem simples e eu só precisava limpar minha cabeça um pouco para perceber isso. A consulta complexa pode ser dividida em um objeto Json.
JsonObject queryParam = new JsonObject()
.put("id", new JsonObject().put("$in", listOfIds)); // ArrayList<Long>
Eu posso ir em frente e usar a consulta de localização simples com este queryParam.
mongoClient.find("collection", queryParam, asyncResult -> {
// do something
});