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.