我在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(&#34;作者&#34;,&#34;某人))。
答案 0 :(得分:3)
您的_id值nCgNlWhzJM9/lHDVQmXQrg==
显示为Base64编码,因此您的java查询应该写成:
Document doc = mongoCollection
.find(eq("_id", new Binary((byte) 0, Base64.getDecoder().decode("nCgNlWhzJM9/lHDVQmXQrg=="))))
.first();
在使用密钥创建二进制过滤器之前解码密钥。