Как запросить документы с помощью поля " id " в драйвере Java mongodb?
Я пытаюсь найти документы в MongoDB, выполнив поиск по ключу "_id". Мой документ выглядит так ... --4-->
{
  "_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 поддерживает (строковый ключ, значение), и если я передаю "_id" как строку этому методу, никакие документы не сопоставляются.
Итак, мой вопрос в том, как мне пройти "_id"?
4 ответов
не уверен, что другие могут искать ответы на эту тему, но вот самый простой способ поиска записи MongoDB на основе "_id". Документация 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;
}
для тех, кто ищет более современный метод, особенно с 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
}
вы можете сделать это
 ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
    BasicDBObject obj = new BasicDBObject();        
    obj.append("_id", id);        
    BasicDBObject query = new BasicDBObject();        
    query.putAll((BSONObject)query);