Overview
En esta gu铆a, puedes aprender a usar la librer铆a PHP de MongoDB para especificar qu茅 campos devolver de una operaci贸n de lectura usando una proyecci贸n. La proyecci贸n es un documento que especifica qu茅 campos devuelve MongoDB de una query.
Datos de muestra
Los ejemplos de esta gu铆a utilizan el restaurants colecci贸n en la base de datos sample_restaurants de la Conjuntos de datos de muestra de Atlas. Para acceder a esta colecci贸n desde tu aplicaci贸n PHP, instancie un MongoDB\Client que se conecte a un cl煤ster de Atlas y asigne el siguiente valor a tu variable $collection:
$collection = $client->sample_restaurants->restaurants;
Para saber c贸mo crear una implementaci贸n gratuita de MongoDB y cargar los conjuntos de datos de ejemplo, consulta la gu铆a MongoDB Primeros Pasos.
Tipos de proyecci贸n
Puedes usar una proyecci贸n para especificar qu茅 campos incluir en un documento de devoluci贸n o para especificar qu茅 campos excluir. No puedes combinar instrucciones de inclusi贸n y exclusi贸n en una 煤nica proyecci贸n, a menos que excluyas el campo _id.
Especifica los campos que deseas incluir
Para especificar los campos que se incluir谩n en el resultado, pasa un arreglo de opciones al m茅todo MongoDB\Collection::findOne() o MongoDB\Collection::find() que establezca la opci贸n projection. Utiliza la siguiente sintaxis para configurar esta opci贸n:
$options = [ 'projection' => [ '<field name>' => 1, ], ];
El siguiente ejemplo crea un arreglo de opciones y configura la opci贸n projection para que s贸lo devuelva los campos name, cuisine y borough de los documentos coincidentes. Luego, llama al m茅todo find() para encontrar todos los restaurantes en los que el valor del campo name es 'Emerald Pub', pasando el arreglo de opciones como par谩metro a find():
$options = [ 'projection' => [ 'name' => 1, 'cuisine' => 1, 'borough' => 1, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},"borough":"Manhattan","cuisine":"American","name":"Emerald Pub"} {"_id":{"$oid":"..."},"borough":"Queens","cuisine":"American","name":"Emerald Pub"}
Cuando utilizas una proyecci贸n para especificar los campos que se incluir谩n en el documento de retorno, el campo _id tambi茅n se incluye por defecto. Todos los dem谩s campos se excluyen impl铆citamente. Para remover el campo _id del documento de retorno, se debe excluirlo expl铆citamente.
Excluir el campo _id
Al especificar los campos a incluir, tambi茅n puedes excluir el campo _id del documento devuelto.
El siguiente ejemplo ejecuta la misma query que el ejemplo anterior, pero excluye el campo _id de la proyecci贸n:
$options = [ 'projection' => [ '_id' => 0, 'name' => 1, 'cuisine' => 1, 'borough' => 1, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"borough":"Manhattan","cuisine":"American","name":"Emerald Pub"} {"borough":"Queens","cuisine":"American","name":"Emerald Pub"}
Especificar campos a excluir
Para especificar los campos que se deben excluir del resultado, pasa un arreglo de opciones al m茅todo MongoDB\Collection::findOne() o MongoDB\Collection::find() que establezca la opci贸n projection. Utiliza la siguiente sintaxis para configurar esta opci贸n:
$options = [ 'projection' => [ '<field name>' => 0, ], ];
El siguiente ejemplo crea un arreglo de opciones y configura la opci贸n projection para excluir los campos grades y address de los documentos coincidentes. Luego llama al m茅todo find() para encontrar todos los restaurantes en los que el valor del campo name es 'Emerald Pub', pasando el arreglo de opciones como un par谩metro a find():
$options = [ 'projection' => [ 'grades' => 0, 'address' => 0, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},"borough":"Manhattan","cuisine":"American", "name":"Emerald Pub","restaurant_id":"40367329"} {"_id":{"$oid":"..."},"borough":"Queens","cuisine":"American", "name":"Emerald Pub","restaurant_id":"40668598"}
Cuando se utiliza una proyecci贸n para especificar qu茅 campos deben excluirse, cualquier campo no especificado se incluye impl铆citamente en el documento de retorno.
Informaci贸n Adicional
Para obtener m谩s informaci贸n sobre las proyecciones, consulte la gu铆a de Campos del proyecto en el manual de MongoDB Server.
Documentaci贸n de la API
Para aprender m谩s sobre cualquiera de los m茅todos o tipos analizados en esta gu铆a, consulta la siguiente documentaci贸n de API: