Java -- MongoDB collection.find() by _id

标签 java mongodb collections mongodb-query

我试图通过使用他的唯一 _id 从集合中获取元素,但我找不到方法。

这是我的代码

MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("DB");
MongoCollection<Document> collection =   database.getCollection("COLL");

如果我用

查询我的数据库
BasicDBObject query=new BasicDBObject("info.i0","0");
Document myDoc = collection.find(query).first();
System.out.println(myDoc.toJson());

我得到输出

{ "_id" : { "$oid" : "560ea3f205240f065a3e9d19" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "i0" : "0", "i1" : "1", "i2" : "2", "i3" : "3", "i4" : "4", "i5" : "5", "i6" : "6", "i7" : "7", "i8" : "8", "i9" : "9" } }

但如果我尝试

BasicDBObject query=new BasicDBObject("_id.$oid","560ea3f205240f065a3e9d19");
Document myDoc = collection.find(query).first();
System.out.println(myDoc.toJson());

我得到一个空指针异常,因为 myDoc 是空的。

我做错了什么?

最佳答案

$oid 只存在于 preserve BSON representation .

它只对 MongoDB 内部 JSON 解析器有意义。

您只需在查询中使用 _id:

BasicDBObject query=new BasicDBObject("_id",new ObjectId("560ea3f205240f065a3e9d19"));

另外,请注意 _id 字段的类型是 ObjectId 而不是 String

您必须将其包装在 ObjectId 构造函数中。

关于Java -- MongoDB collection.find() by _id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915766/

相关文章:

java - Jackson解析器异常: unexpected Character

java - java线程环境下一次性获取Json响应

php - 如何使用 MongoDb 特定运算符 $size 来查找大于、小于、介于和不等于 Laravel/jenssegers 中的值的数组大小?

java - 如何将逗号分隔的字符串转换为列表?

java - Java 中的 IEqualityComparer 接口(interface)

java - JGroups 'cannot find symbol'

java - 使用命令行参数来完成河内程序?

mongodb - 如何将 mongodb 客户端连接到本地 Meteor MongoDB

javascript - Node js mongodb 中的异步/等待处理错误

c# - 克隆/深度复制 .NET 泛型 Dictionary<string, T> 的最佳方法是什么?