46

我试图通过搜索“_id”键在 MongoDB 中查找文档。我的文件看起来像这样-

{
  "_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 的 append 方法支持 (String Key, Value),如果我将“_id”作为字符串传递给该方法,则没有匹配的文档。

所以我的问题是如何传递“_id”?

4

5 回答 5

65

不确定其他人是否可能正在搜索有关此主题的答案,但这是基于“_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;
}
于 2012-10-08T20:09:57.237 回答
29

对于那些正在寻求更新方法的人,尤其是 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
}
于 2017-11-09T10:57:57.837 回答
5

你可以这样做

 ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
    BasicDBObject obj = new BasicDBObject();        
    obj.append("_id", id);        
    BasicDBObject query = new BasicDBObject();        
    query.putAll((BSONObject)query);
于 2016-07-12T09:53:21.357 回答
1

通过使用查询解决它 -

query.putAll((BSONObject)query);
于 2012-03-21T03:01:20.323 回答
-1

你可以试试这个片段:

ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
BasicDBObject obj = new BasicDBObject();        
obj.append("_id", id);        
BasicDBObject query = new BasicDBObject();        
query.putAll((BSONObject)obj);
于 2020-07-08T11:13:06.253 回答