2012-03-21 163 views
28

我想通过搜索“_id”键在MongoDB中查找文档。我的文件看起来像这个 -如何使用Java mongodb驱动程序中的“_id”字段查询文档?

{ 
    "_id" : ObjectId("4f693d40e4b04cde19f17205"), 
    "hostname" : "hostnameGoesHere", 
    "OSType" : "OSTypeGoesHere" 
} 

我想这个文件搜索原样

ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");   
BasicDBObject obj = new BasicDBObject();   
obj.append("_id", id);   
BasicDBObject query = new BasicDBObject();   
query.putAll(query); 

,但我得到下面的错误 -

error: reference to putAll is ambiguous, both method putAll(Map) in BasicBSONObject and method putAll(BSONObject) in BasicBSONObject match 
     query.putAll(query); 

BasicDBObject支持的追加方法(String键,值),如果我将“_id”作为字符串传递给此方法,则不会匹配任何文档。

所以我的问题是如何通过“_id”?

+0

对方回答更多的帮助了我。也许你接受这个... – Ohmen 2016-02-26 19:08:11

回答

3

通过查询解决它原样

query.putAll((BSONObject)query); 
48

不知道其他人可能会寻找关于这个主题的答案,但这里是寻找基于“_id”一个MongoDB中记录的最简单的方法。 MongoDB文档没有更新,仍然显示ObjectId是com.mongodb包的一部分(它通常也没有提供关于ObjectId搜索的大量信息)。

import org.bson.types.ObjectId; 

public DBObject findDocumentById(String id) { 

    BasicDBObject query = new BasicDBObject(); 
    query.put("_id", new ObjectId(id)); 

    DBObject dbObj = collection.findOne(query); 
    return dbObj; 
} 
0

你可以做到这一点

ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");   
    BasicDBObject obj = new BasicDBObject();   
    obj.append("_id", id);   
    BasicDBObject query = new BasicDBObject();   
    query.putAll((BSONObject)query); 
1

对于那些谁正在寻找一个更加最新的方法,尤其是3.4:

import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 
import org.bson.Document; 
import org.bson.types.ObjectId; 

import static com.mongodb.client.model.Filters.eq; 

//...... 
MongoCollection<Document> myCollection = database.getCollection("myCollection"); 
Document document = myCollection.find(eq("_id", new ObjectId("4f693d40e4b04cde19f17205"))).first(); 
if (document == null) { 
    //Document does not exist 
} else { 
    //We found the document 
} 
相关问题