En MongoDB, el distinct
El comando de agregación encuentra los distintos valores para un campo específico en una sola colección.
Devuelve un documento que contiene una matriz de valores distintos, así como un documento incrustado con estadísticas de consulta y el plan de consulta.
Los valores distintos son aquellos con duplicados redundantes eliminados. Los valores distintos son valores únicos. Por ejemplo, si tiene 2 o 3 documentos con el mismo valor, el distinct
el comando devolverá solo un valor.
También hay un db.collection.distinct()
método, que es un método contenedor de shell para distinct
comando.
Ejemplo
Supongamos que tenemos una colección llamada pets
con los siguientes documentos.
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
Podemos usar el distinct
Comando para devolver los distintos tipos de mascotas.
El distinct
El comando acepta la colección como el primer campo y la clave como el segundo. La clave es el campo para el que devolver valores distintos.
db.runCommand ( { distinct: "pets", key: "type" } )
Resultado:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
En este ejemplo, aunque hay cuatro perros y dos gatos en la colección, la matriz solo contiene uno de cada uno. El distinct
El comando eliminó los valores duplicados.
El documento original tiene solo un bate y, por lo tanto, distinct
El comando no cambia eso:no había valores duplicados para deduplicar.
Documentos incrustados
Puede usar la notación de puntos para obtener valores distintos de un campo incrustado
Supongamos que tenemos una colección llamada products
que contiene los siguientes documentos:
{ "_id" : 1, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : { "name" : "Shirt", "color" : "Green" }, "sizes" : [ "S", "M", "XL" ] } { "_id" : 3, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 4, "product" : { "name" : "Shorts", "color" : "Green" }, "sizes" : [ "M", "XS" ] } { "_id" : 5, "product" : { "name" : "Shorts", "color" : "Brown" }, "sizes" : [ "S", "M" ] } { "_id" : 6, "product" : { "name" : "Cap", "color" : "Purple" }, "sizes" : [ "M" ] } { "_id" : 7, "product" : { "name" : "Shoes", "color" : "Brown" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 8, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "M", "L", "XL" ] } { "_id" : 9, "product" : { "name" : "Cap", "color" : "Green" }, "sizes" : [ "M", "L" ] }
Podemos usar la siguiente consulta para devolver valores distintos para los nombres de productos.
db.runCommand ( { distinct: "products", key: "product.name" } )
Resultado:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Podemos hacer lo mismo para el color
campo.
db.runCommand ( { distinct: "products", key: "product.color" } )
Resultado:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
Obtener valores distintos de una matriz
Aquí se explica cómo usar el distinct
comando para obtener los distintos valores de la matriz anterior.
db.runCommand ( { distinct: "products", key: "sizes" } )
Resultado:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
Usar distinct
con una Consulta
Puede proporcionar una consulta para especificar los documentos de los que recuperar los distintos valores. Para hacer esto, agregue la consulta después de la clave.
Ejemplo:
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
Resultado:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Más información
El distinct
El comando también acepta otros campos, como comment
, readConcern
y collation
(que le permite especificar reglas específicas del idioma para la comparación de cadenas, como reglas para mayúsculas y minúsculas y acentos).
Consulte la documentación de MongoDB para obtener más información.