En MongoDB, el db.collection.distinct()
El método encuentra los distintos valores para un campo específico en una sola colección o vista y devuelve los resultados en una matriz.
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.
db.collection.distinct()
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 distinct()
método para devolver los distintos tipos de mascotas.
db.pets.distinct( "type" )
Resultado:
[ "Bat", "Cat", "Dog" ]
Entonces, aunque hay cuatro perros y dos gatos, la matriz solo contiene uno de cada uno. El distinct()
El método eliminó los valores duplicados.
El documento original tiene solo un murciélago, por lo que distinct()
El método 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.products.distinct(
"product.name"
)
Resultado:
[ "Cap", "Shirt", "Shoes", "Shorts" ]
Podríamos hacer lo mismo para el color
campo.
db.products.distinct(
"product.color"
)
Resultado:
[ "Brown", "Green", "Purple", "White" ]
Obtener valores distintos de una matriz
Aquí se explica cómo usar distinct()
método para obtener los distintos valores de la matriz anterior.
db.products.distinct( "sizes" )
Resultado:
[ "L", "M", "S", "XL", "XS" ]
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 del campo.
Ejemplo:
db.products.distinct( "product.name", { sizes: "S" } )
Resultado:
[ "Shirt", "Shoes", "Shorts" ]
Más información
db.collection.distinct()
El método también acepta una 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.