Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

174
Vistas
Obtener objetos MongoDB\Driver\Cursor directamente en la clase especificada

Actualmente, cada documento obtenido de Mongo DB va a un objeto stdClass . Me gustaría cargar esto directamente en mi propia clase personalizada.

La clase

 class TestClass { private $id; private $class; function __construct($id, $name) { $this->id = $id; $this->class = $class; } }

El código

 $m = MongoDB\Driver\Manager('mongodb://<user>:<pass>@<host>/<db>'); $query = MongoDB\Driver\Query(['name' => 'TestFirst']); // I tried adding the following line, but it says that the constructor args are missing. // If I omit it, it just adds each cursor object as an instance of stdClass $opt = ['cursor' => new TestClass]; $results = $m->executeQuery('newDb.testCollection', $query, $opt); foreach ($results as $document) { var_dump($document); }

¿Es posible lo que quiero lograr, o necesito pasar por cada objeto stdClass y convertirlo en una instancia de TestClass ?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La clase en sí necesita implementar la interfaz MongoDB\BSON\Unserializable y el bsonUnserialize(array $data) para convertir una matriz de datos BSON en la clase en cuestión.

 class TestClass implements MongoDB\BSON\Unserializable, MongoDB\BSON\Serializable { private $id; private $name; function __construct ($id, $name) { $this->id = $id; $this->name = $name; } function bsonUnserialize(array $data) { // This will be called *instead* of the constructor if unserializing $this->id = $data['_id']; $this->id = $data['name']; } }

El mapa de tipos de MongoDB\Driver\Cursor que se devuelve de la consulta debe configurarse para asignar un documento a una instancia de la clase personalizada. El código terminado se ve así.

 $mongo = new MongoDB\Driver\Manager($constr); $query = MongoDB\Driver\Query(['name' => 'TestFirst']); $cursor = $mongo->executeQuery($query); $cursor->setTypeMap('root' => 'array', 'document' => 'TestClass', 'array' => 'array'); foreach ($cursor as $doc) { var_dump($doc); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda