Tengo algunas entradas en una base de datos mongodb. Tienen _ids binarios. Si consulto con un cliente mongo como robomongo, puedo encontrar la entrada que estoy buscando:
db.getCollection('comment').find({"_id" : new BinData(0,"nCgNlWhzJM9/lHDVQmXQrg==")})Sin embargo, tengo serios problemas para hacer lo mismo en Java. Esto es lo que estoy tratando de hacer:
final MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("comment"); mongoCollection .find(eq("_id", new Binary((byte) 0, "nCgNlWhzJM9/lHDVQmXQrg==".getBytes(StandardCharsets.UTF_8)))) .first()Lamentablemente esto no está funcionando. Intentar encontrar un elemento con un tipo de cadena funciona (como eq("autor", "alguien) ).
Su valor nCgNlWhzJM9/lHDVQmXQrg== se muestra codificado en Base64, por lo que su consulta Java debe escribirse:
Document doc = mongoCollection .find(eq("_id", new Binary((byte) 0, Base64.getDecoder().decode("nCgNlWhzJM9/lHDVQmXQrg==")))) .first();Para decodificar la clave antes de usarla para crear el filtro binario.