Docs Menu
Docs Home
/ /

db.collection.distinct() (método de mongosh)

MongoDB con controladores

Esta página documenta una mongosh . Para ver el método equivalente en un driver de MongoDB, se debe consultar la página correspondiente al lenguaje de programación:

C#Java SyncNode.jsPyMongoC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRubyRustScala
db.collection.distinct(field, query, options)

Encuentra los valores distintos para un campo especificado en una única colección o vista, y devuelve los resultados únicos en un arreglo.

Este método está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Este método toma los siguientes parámetros:

Parameter
Tipo
Descripción

field

string

El campo para el que se deben devolver valores distintos.

query

Documento

Una query que especifica los documentos de los cuales recuperar los valores distintos.

options

Documento

Opcional. Un documento que especifica las opciones. Consulte Opciones.

Nota

Los resultados no deben ser mayores que el tamaño máximo de BSON. Si tus resultados exceden el tamaño máximo de BSON, utiliza la canalización de agregación para recuperar valores distintos mediante el operador $group, como se describe en Recuperar valores distintos con la pipeline de agregación.

El siguiente diagrama muestra un ejemplo de llamada db.collection.distinct().

Diagrama de la operación distinta anotada.
{ collation: <document> }
Campo
Tipo
Descripción

collation

Documento

Opcional.

Especifica la intercalación a utilizar para la operación.

La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento.

La opción de intercalación tiene la siguiente sintaxis:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Al especificar la intercalación, el campo locale es obligatorio; todos los demás campos de intercalación son opcionales. Para las descripciones de los campos, consulta Documento de intercalación.

Si no se especifica la intercalación, pero la colección tiene una intercalación por defecto (ver db.createCollection()), la operación utiliza la intercalación especificada para la colección.

Si no se especifica ninguna intercalación para la colección o para las operaciones, MongoDB utiliza la comparación binaria simple usada en versiones anteriores para las comparaciones de strings.

No puedes especificar varias intercalaciones para una operación. Por ejemplo, no puedes especificar diferentes intercalaciones por campo, o si realizas una búsqueda con un ordenamiento, no puedes usar una intercalación para la búsqueda y otra para el ordenamiento.

En un clúster particionado, el comando distinct puede devolver documentos huérfanos.

Para colecciones de series de tiempo, el comando distinct no puede hacer un uso eficiente de los índices. En su lugar, utilice una agregación $group para agrupar documentos según valores distintos. Para obtener más detalles, consulte Limitaciones de serie de tiempo.

Si el valor del field especificado es un arreglo, db.collection.distinct() considera cada elemento del arreglo como un valor separado.

Por ejemplo, si un campo tiene como valor [ 1, [1], 1 ], entonces db.collection.distinct() considera 1, [1], y 1 como valores separados.

Para ver un ejemplo, consulte Devolver valores únicos para un campo de arreglo.

Cuando sea posible, las operaciones de db.collection.distinct() pueden utilizar índices.

Los índices también pueden cubrir operaciones db.collection.distinct(). Consulte Ejecutar queries cubiertos para obtener más información sobre los queries cubiertos por índices.

Para realizar una operación específica dentro de una transacción:

  • Para colecciones no fragmentadas, puedes utilizar el método db.collection.distinct() o el comando distinct, así como la canalización de agregación con la etapa $group.

  • Para colecciones particionadas, no puede utilizar el método db.collection.distinct() ni el comando distinct.

    Para encontrar los valores distintos de una colección fragmentada, utiliza la canalización de agregación con la etapa $group en su lugar. Consulta la Operación distinta para obtener más detalles.

Importante

En la mayoría de los casos, una transacción distribuida incurre en un costo de rendimiento mayor que las escrituras de documentos individuales, y la disponibilidad de transacciones distribuidas no debería ser un sustituto para un diseño de esquema efectivo. Para muchos casos, el modelo de datos desnormalizado (documento incrustado y matrices) seguirá siendo óptimo para tus datos y casos de uso. Es decir, en muchos casos, modelar tus datos de forma adecuada minimizará la necesidad de transacciones distribuidas.

Para consideraciones adicionales sobre el uso de transacciones (como el límite de tiempo de ejecución y el límite de tamaño del oplog), consulta también las consideraciones de producción.

Si el cliente que emitió db.collection.distinct() se desconecta antes de que la operación se complete, MongoDB marca db.collection.distinct() para su terminación usando killOp.

Para que se ejecuten en un set de réplicas, las operaciones de distinct requieren que el nodo esté en estado PRIMARY o SECONDARY. Si el nodo se encuentra en otro estado, como STARTUP2, se produce un error en la operación.

Nuevo en la versión 8.0.

Puedes utilizar la configuración de query para establecer sugerencias de índice, fijar filtros de rechazo de operación y otros campos. Los ajustes se aplican a la forma de la query en todo el clúster. El clúster retiene la configuración después del apagado.

El optimizador de query utiliza la configuración del query como entrada adicional durante la planificación del query, lo que afecta al plan seleccionado para ejecutar el query. También puedes usar la configuración del query para bloquear una forma del query.

Para añadir configuraciones de query y explorar ejemplos, consulte setQuerySettings.

Puedes añadir configuraciones de query para los comandos find, distinct, y aggregate.

La configuración de query tiene más funcionalidades y se prefiere sobre los filtros de índice en desuso.

Para remover la configuración del query, utilice removeQuerySettings. Para obtener la configuración del query, utilice una etapa de $querySettings en una canalización de agregación.

Los ejemplos utilizan la colección inventory que contiene los siguientes documentos:

db.inventory.insertMany( [
{ _id: 1, dept: "A", item: { sku: "111", color: "red" }, sizes: [ "S", "M" ] },
{ _id: 2, dept: "A", item: { sku: "111", color: "blue" }, sizes: [ "M", "L" ] },
{ _id: 3, dept: "B", item: { sku: "222", color: "blue" }, sizes: "S" },
{ _id: 4, dept: "A", item: { sku: "333", color: "black" }, sizes: [ "S" ] }
] )

El siguiente ejemplo devuelve los valores distintos para el campo dept de todos los documentos en la colección inventory:

db.inventory.distinct( "dept" )

El método devuelve el siguiente arreglo de valores únicos de dept:

[ "A", "B" ]

El siguiente ejemplo devuelve los valores distintos del campo sku, incrustado en el campo item, de todos los documentos de la colección inventory:

db.inventory.distinct( "item.sku" )

El método devuelve el siguiente arreglo de valores únicos de sku:

[ "111", "222", "333" ]

Tip

Notación de puntos para obtener información sobre cómo acceder a campos dentro de documentos incrustados

El siguiente ejemplo devuelve los valores distintos para el campo sizes de todos los documentos en la colección inventory:

db.inventory.distinct( "sizes" )

El método devuelve el siguiente arreglo de valores únicos de sizes:

[ "M", "S", "L" ]

Para obtener información sobre distinct() y los campos de arreglo, consulta la sección Comportamiento.

El siguiente ejemplo devuelve los valores únicos para el campo skue incrusta en el campo item, de los documentos cuyo dept es igual a "A":

db.inventory.distinct( "item.sku", { dept: "A" } )

El método devuelve el siguiente arreglo de valores únicos de sku:

[ "111", "333" ]

La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento.

Una colección myColl tiene los siguientes documentos:

db.myColl.insertMany( [
{ _id: 1, category: "café", status: "A" },
{ _id: 2, category: "cafe", status: "a" },
{ _id: 3, category: "cafE", status: "a" }
] )

La siguiente operación de agregación incluye la opción de intercalación:

db.myColl.distinct( "category", {}, { collation: { locale: "fr", strength: 1 } } )

Para obtener descripciones sobre los campos de intercalación, consulta el Documento de intercalación.

Volver

db.collection.deleteOne

En esta página