用二进制_id进行Mongodb java驱动查询

时间:2017-01-24 22:10:52

标签: java mongodb

我在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;某人))。

1 个答案:

答案 0 :(得分:3)

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

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

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