remove - ¿Cómo consultar documentos utilizando el campo "_id" en el controlador mongodb de Java?
update mongodb example (4)
No estoy seguro de si otros pueden estar buscando respuestas sobre este tema, pero esta es la forma más fácil de buscar un registro de MongoDB basado en "_id". La documentación de MongoDB no se actualiza y aún muestra que ObjectId forma parte del paquete com.mongodb
(en general, tampoco proporciona mucha información sobre las búsquedas realizadas 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;
}
Estoy intentando encontrar documentos en MongoDB buscando la tecla "_id". Mi documento se ve así
{
"_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 me pongo por debajo del error
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 anexado de BasicDBObject es compatible (clave de cadena, valor) y si paso "_id" como cadena a este método, no hay documentos que coincidan.
Entonces mi pregunta es ¿cómo paso "_id"?
Para aquellos que buscan un método más actualizado, 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
}
Puedes hacerlo
ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");
BasicDBObject obj = new BasicDBObject();
obj.append("_id", id);
BasicDBObject query = new BasicDBObject();
query.putAll((BSONObject)query);
Resuelto usando una consulta como
query.putAll((BSONObject)query);