Java - 由_id提供的MongoDB collection.find()

时间:2015-10-02 20:59:02

标签: 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());

我得到一个Null指针异常,因为myDoc为null。

我做错了什么?

3 个答案:

答案 0 :(得分:6)

$oid只有preserve BSON representation

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

您只需在查询中使用_id

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

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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