Java--通过_id在MongoDB集合中查找文档

5

我正在尝试通过使用唯一的_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为空。
我做错了什么?
3个回答

6

$oid 只是用来保留 BSON 表示

它只有在 MongoDB 内部的 JSON 解析器中才有意义。

你只需要在查询中使用 _id

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

此外,请注意,_id 字段的类型为 ObjectId 而非 String

你需要将其包装在 ObjectId 构造函数中。


谢谢。我之前使用的是("_id","ObjectId("560ea3f205240f065a3e9d19")");这就是问题所在。 - rastabob

0
使用 JSON(scala):Json.obj("_id" -> Json.obj("$oid" -> "560ea3f205240f065a3e9d19"))

0

好消息是您的查询没有问题,但您的文档看起来不正确,您如何能够插入以$开头的字段名?

文档对字段名称有以下限制:

_id字段名称被保留用作主键;其值必须在集合中唯一且不可变,并且可以是除数组之外的任何类型。 字段名称不能以美元符号($)字符开头。 字段名称不能包含点(.)字符。 字段名称不能包含空字符。

http://docs.mongodb.org/manual/core/document/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接