Как запрашивать документы с использованием поля _id в драйвере Java mongodb?

Я пытаюсь найти документы в 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 Key, Value), и если я передаю "_id" как String в этот метод, никакие документы не будут сопоставлены.

Итак, мой вопрос: как передать "_id"?


person user837208    schedule 21.03.2012    source источник


Ответы (5)


Не уверен, что другие могут искать ответы на эту тему, но вот самый простой способ поиска записи 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;
}
person Chris    schedule 08.10.2012
comment
Это устарело? - person Stu_Dent; 11.10.2020

Для тех, кто ищет более современный метод, особенно с 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
}
person bogolyandras    schedule 09.11.2017
comment
мы можем здесь использовать findOne? - person neoexpert; 09.04.2019
comment
Я не думаю, что мы можем использовать этот метод больше. Это было частью старого API api.mongodb.com/java/2.14 /com/mongodb/DBCollection.html Новый - немного другой api.mongodb.com/java/3.0/com/mongodb/async/client/ - person bogolyandras; 10.04.2019
comment
эквалайзер не применим к 3.12? - person Stu_Dent; 11.10.2020

Ты можешь сделать это

 ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
    BasicDBObject obj = new BasicDBObject();        
    obj.append("_id", id);        
    BasicDBObject query = new BasicDBObject();        
    query.putAll((BSONObject)query);
person Nifras Nipy    schedule 12.07.2016

Решил это с помощью запроса как-

query.putAll((BSONObject)query);
person user837208    schedule 21.03.2012

Вы можете попробовать этот фрагмент:

ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
BasicDBObject obj = new BasicDBObject();        
obj.append("_id", id);        
BasicDBObject query = new BasicDBObject();        
query.putAll((BSONObject)obj);
person Srushti Maladkar    schedule 08.07.2020