sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB distinto()

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.