Soy nuevo con mongo.
Intento obtener un subdocumento de un documento, aquí está mi documento:
{ "_id" : ObjectId("5900ab35c720b210c000032c"), "name" : "B 1", "providers" : [ { "id" : ObjectId("59030550c720b211dc005e9e"), "name" : "F 1" }, { "id" : ObjectId("59030577c720b211dc005e9f"), "name" : "F 2" } ] }y quiero obtener este subdocumento:
{ "id" : ObjectId("59030577c720b211dc005e9f"), "name" : "F 2" }Creo que necesito usar esta clase: http://php.net/manual/en/mongocollection.aggregate.php pero no pude usarla con mi instancia de administrador de la clase: http://php.net /manual/es/class.mongodb-driver-manager.php .
El manual de PHP no muestra cómo usarlo con el nuevo controlador.
¿Alguien me puede ayudar?
Gracias y buenos días !
No tiene que usar la agregación para la tarea.
Puede usar consultas regulares para seleccionar el primer subdocumento coincidente en las matrices incrustadas.
Puedes abordarlo de un par de maneras.
$filter = ['_id' => new MongoDB\BSON\ObjectID("5900ab35c720b210c000032c"), 'providers.id' => new MongoDB\BSON\ObjectID("59030577c720b211dc005e9f") ]; $options = ['projection' => ['_id' => 0, 'providers.$' => 1],];Proyección $elemMatch
$filter = ['_id' => new MongoDB\BSON\ObjectID("5900ab35c720b210c000032c")]; $options = [ 'projection' => ['_id' => 0, 'providers' => ['$elemMatch'=> ['id' => new MongoDB\BSON\ObjectID("59030577c720b211dc005e9f")]]], ];Usará la función executeQuery para ejecutar consultas regulares.
$query = new \MongoDB\Driver\Query($filter, $options); $cursor = $manager->executeQuery(dbName.collectionName, $query);