I am trying to find documents in MongoDB by searching on "_id" key. My document looks like this-
我试图通过搜索“_id”键在MongoDB中查找文档。我的文件看起来像这样 -
{
"_id" : ObjectId("4f693d40e4b04cde19f17205"),
"hostname" : "hostnameGoesHere",
"OSType" : "OSTypeGoesHere"
}
I am trying to search this document as-
我试图搜索这份文件 -
ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");
BasicDBObject obj = new BasicDBObject();
obj.append("_id", id);
BasicDBObject query = new BasicDBObject();
query.putAll(query);
But I get below error-
但我得到以下错误 -
error: reference to putAll is ambiguous, both method putAll(Map) in BasicBSONObject and method putAll(BSONObject) in BasicBSONObject match
query.putAll(query);
The append method of BasicDBObject supports (String Key, Value) and if I pass "_id" as String to this method, no documents are matched.
BasicDBObject的append方法支持(String Key,Value),如果我将“_id”作为String传递给此方法,则不匹配任何文档。
So my question is how do I pass "_id"?
所以我的问题是如何通过“_id”?
4 个解决方案
#1
53
Not sure if others might be searching for answers on this topic, but here is the easiest way to search for a MongoDB record based on "_id". The MongoDB documentation is not updated and still shows ObjectId as being part of the com.mongodb
package (it also generally does not give a lot of information on searching by ObjectId).
不确定其他人是否可能正在搜索关于此主题的答案,但这是基于“_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;
}
#2
5
For those who are seeking a more up to date method, especially with 3.4:
对于那些寻求更新方法的人,特别是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
}
#3
3
Solved it by using query as-
通过使用查询解决它 -
query.putAll((BSONObject)query);
#4
1
You can do this
你可以这样做
ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");
BasicDBObject obj = new BasicDBObject();
obj.append("_id", id);
BasicDBObject query = new BasicDBObject();
query.putAll((BSONObject)query);
#1
53
Not sure if others might be searching for answers on this topic, but here is the easiest way to search for a MongoDB record based on "_id". The MongoDB documentation is not updated and still shows ObjectId as being part of the com.mongodb
package (it also generally does not give a lot of information on searching by ObjectId).
不确定其他人是否可能正在搜索关于此主题的答案,但这是基于“_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;
}
#2
5
For those who are seeking a more up to date method, especially with 3.4:
对于那些寻求更新方法的人,特别是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
}
#3
3
Solved it by using query as-
通过使用查询解决它 -
query.putAll((BSONObject)query);
#4
1
You can do this
你可以这样做
ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");
BasicDBObject obj = new BasicDBObject();
obj.append("_id", id);
BasicDBObject query = new BasicDBObject();
query.putAll((BSONObject)query);