2012-03-21 24 views
28

Estoy tratando de encontrar documentos en MongoDB buscando la clave "_id". Mi documento se parece a esto:¿Cómo consultar documentos usando el campo "_id" en el controlador mongodb de Java?

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

Estoy tratando de buscar este documento como-

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

Pero yo llegue a tener menos de errores

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

El método de agregación de soportes BasicDBObject (String Key, Value) y si paso "_id" como String a este método, no hay documentos coincidentes.

Entonces mi pregunta es ¿cómo paso "_id"?

+0

La otra respuesta me ha ayudado más. Quizás aceptes este ... – Ohmen

Respuesta

3

lo resolvió mediante consulta como-

query.putAll((BSONObject)query); 
48

No estoy seguro si otros podrían estar buscando respuestas sobre este tema, pero aquí es la forma más fácil de buscar un registro basado en MongoDB "_id". La documentación de MongoDB no se actualiza y todavía muestra ObjectId como parte del paquete com.mongodb (generalmente tampoco proporciona mucha información sobre la búsqueda por 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

Usted puede hacer esto

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

Para aquellos que buscan un mayor hasta método de la fecha, especialmente con 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 
} 
Cuestiones relacionadas