我在mongodb数据库中有一些条目。它们具有二进制_id。如果我使用robomongo之类的mongo客户端进行查询,则可以找到我要查找的条目:

db.getCollection('comment').find({"_id" : new BinData(0,"nCgNlWhzJM9/lHDVQmXQrg==")})


但是,在Java中执行相同操作时遇到严重问题。这是我想要做的:

final MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("comment");

mongoCollection
             .find(eq("_id", new Binary((byte) 0, "nCgNlWhzJM9/lHDVQmXQrg==".getBytes(StandardCharsets.UTF_8))))
             .first()


不幸的是,这是行不通的。尝试查找具有字符串类型的项目是可行的(例如eq(“ author”,“ someone))。

最佳答案

您的_id值nCgNlWhzJM9/lHDVQmXQrg==显示为Base64编码,因此应编写Java查询:

    Document doc = mongoCollection
    .find(eq("_id", new Binary((byte) 0, Base64.getDecoder().decode("nCgNlWhzJM9/lHDVQmXQrg=="))))
    .first();


在使用密钥创建二进制过滤器之前先对其进行解码。

10-04 17:26