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

Comando distinto de MongoDB

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.