MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Comando distinto do MongoDB


No MongoDB, o distinct O comando de agregação encontra os valores distintos para um campo especificado em uma única coleção.

Ele retorna um documento que contém uma matriz de valores distintos, bem como um documento incorporado com estatísticas de consulta e o plano de consulta.

Valores distintos são aqueles com duplicatas redundantes removidas. Valores distintos são valores únicos. Por exemplo, se você tiver 2 ou 3 documentos com o mesmo valor, o distinct comando retornará apenas um valor.

Há também um db.collection.distinct() método, que é um método shell wrapper para o distinct comando.

Exemplo


Suponha que tenhamos uma coleção chamada pets com os seguintes 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 o distinct comando para retornar os tipos distintos de animais de estimação.

O distinct O comando aceita a coleção como o primeiro campo e a chave como o segundo. A chave é o campo para o qual retornar valores distintos.
db.runCommand ( { distinct: "pets", key: "type" } )

Resultado:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }

Neste exemplo, embora haja quatro cães e dois gatos na coleção, a matriz contém apenas um de cada. O distinct comando removeu os valores duplicados.

O documento original tem apenas um morcego e, portanto, o distinct comando não muda isso - não havia valores duplicados para desduplicar.

Documentos incorporados


Você pode usar a notação de ponto para obter valores distintos de um campo incorporado

Suponha que tenhamos uma coleção chamada products que contém os seguintes 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 a seguinte consulta para retornar valores distintos para os nomes dos produtos.
db.runCommand ( { distinct: "products", key: "product.name" } )

Resultado:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Podemos fazer o mesmo para a color campo.
db.runCommand ( { distinct: "products", key: "product.color" } )

Resultado:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }

Obter valores distintos de uma matriz


Veja como usar o distinct comando para obter os valores distintos da matriz acima.
db.runCommand ( { distinct: "products", key: "sizes" } )

Resultado:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }

Use distinct com uma consulta


Você pode fornecer uma consulta para especificar os documentos dos quais recuperar os valores distintos. Para fazer isso, adicione a consulta após a chave.

Exemplo:
db.runCommand ( { 
    distinct: "products", 
    key: "product.name", 
    query: { "sizes": "S" } 
    } )

Resultado:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Mais informações


O distinct O comando também aceita outros campos, como comment , readConcern , e collation (que permite especificar regras específicas do idioma para comparação de strings, como regras para maiúsculas e minúsculas e acentos).

Consulte a documentação do MongoDB para obter mais informações.