Overview
En esta guía, puedes aprender cómo usar la librería de PHP de MongoDB para recuperar los valores distintos de un campo especificado en una colección.
Dentro de una colección, diferentes documentos podrían contener valores diferentes para un solo campo. Por ejemplo, un documento en una colección restaurants tiene un valor borough de 'Manhattan', y otro tiene un valor borough de 'Queens'. Al usar la librería PHP de MongoDB, puedes recuperar todos los valores únicos que un campo contiene en varios documentos de una colección.
Datos de muestra
The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your PHP application, instantiate a MongoDB\Client that connects to an Atlas cluster and assign the following value to your $collection variable:
$collection = $client->sample_restaurants->restaurants;
Para aprender a crear una implementación gratuita de MongoDB y cargar los conjuntos de datos de muestra, consulta la guía Introducción de MongoDB.
MongoDB\Collection::distinct() Método
Para recuperar los valores distintos de un campo especificado, llama al método MongoDB\Collection::distinct() y pasa el nombre del campo para el que deseas encontrar valores distintos.
Recuperar valores distintos en una colección
El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants:
$results = $collection->distinct('borough', []); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
La operación devuelve un arreglo que almacena cada valor distinto del campo borough. Aunque varios documentos tienen el mismo valor en el campo borough, cada valor solo aparece una vez en los resultados.
Recupere valores distintos en documentos especificados
Puedes proporcionar un filtro de query al método distinct() para encontrar los valores de campo distintos en un subconjunto de documentos en una colección. Un filtro de query es una expresión que especifica los criterios de búsqueda utilizados para coincidir documentos en una operación. Para obtener más información sobre cómo crear un filtro de query, consulta la guía Especificar una query.
El siguiente ejemplo recupera los valores distintos del campo borough para todos los documentos que tienen un valor de campo cuisine de 'Italian':
$results = $collection->distinct('borough', ['cuisine' => 'Italian']); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
Modificar el comportamiento de Distinct
Puedes modificar el comportamiento del método distinct() pasando un arreglo que especifique valores de opciones. La siguiente tabla describe algunas opciones que puede establecer para personalizar la operación:
Opción | Descripción |
|---|---|
| La intercalación que se utilizará para la operación. Para obtener más información, consulte la sección Intercalación de esta página. |
| La cantidad máxima de tiempo en milisegundos que la operación puede ejecutar. |
| El comentario que se va a adjuntar a la operación. |
| Preferencia de lectura que se utilizará para la operación. Para obtener más información, consulte Preferencia de lectura en el manual del servidor. |
| El índice que se utilizará para la operación. |
El siguiente ejemplo recupera los valores distintos del campo name para todos los documentos que tienen un valor de campo borough de 'Bronx' y un valor de campo cuisine de 'Pizza'. También especifica el campo comment en una arreglo de opciones para agregar un comentario a la operación:
$query = ['borough' => 'Bronx', 'cuisine' => 'Pizza']; $options = ['comment' => 'Bronx pizza restaurants']; $results = $collection->distinct('name', $query, $options); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
Intercalación
Para especificar una intercalación para tu operación, pasa un parámetro arreglo $options que establezca la opción collation en el método de la operación. Asigna la opción collation a un arreglo que configure las reglas de intercalación.
La siguiente tabla describe los campos que se pueden configurar para la intercalación:
Campo | Descripción |
|---|---|
| (Required) Specifies the International Components for Unicode (ICU) locale. For a list of supported locales, see Collation Locales and Default Parameters in the MongoDB Server manual. |
| (Opcional) Especifica si se debe incluir la comparación de mayúsculas y minúsculas. |
| (Opcional) Especifica el orden de clasificación de las diferencias de mayúsculas y minúsculas durante las comparaciones de nivel terciario. |
| (Optional) Specifies the level of comparison to perform, as defined in the ICU documentation. |
| (Opcional) Especifica si el controlador compara las cadenas numéricas como números. |
| (Opcional) Especifica si la librería considera los espacios en blanco y la puntuación como caracteres base a los efectos de la comparación. |
| (Opcional) Especifica qué caracteres considera la librería ignorables cuando el campo |
| (Opcional) Especifica si las strings que contienen diacríticos se ordenan de atrás hacia adelante en la string. |
Para obtener más información sobre la intercalación y los posibles valores de cada campo, consulta la entrada Collation en el manual del servidor de MongoDB.
Documentación de la API
Para obtener más información sobre el método distinct(), consulte MongoDB\Collection::distinct() en la documentación de la API.