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

3 maneiras de retornar valores distintos no MongoDB


Valores distintos são aqueles valores com duplicatas redundantes removidas. Em outras palavras, valores distintos são valores únicos.

No MongoDB, existem algumas maneiras de retornar valores distintos em uma consulta. Este artigo apresenta 3 maneiras de retornar valores distintos no shell do mongo.

Dados de amostra


Os exemplos nesta página usam a seguinte coleção chamada pets :
{ "_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 }

O distinct() Método


No MongoDB, o db.collection.distinct() O método encontra os valores distintos de um campo especificado em uma única coleção ou exibição e retorna os resultados em uma matriz.

Exemplo:
db.pets.distinct( "type" )

Resultado:
[ "Bat", "Cat", "Dog" ]

Esses três valores são os valores distintos para o type campo nos documentos acima.

Os pets part simplesmente nomeia a coleção da qual retornar os valores distintos.

O db.collection.distinct() é um método shell wrapper para o distinct comando (abaixo).

O distinct Comando


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.
db.runCommand ( { distinct: "pets", key: "type" } )

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

Podemos ver que os mesmos valores distintos são retornados, exceto que desta vez estão em um documento que também contém as outras informações.

O $group Operador de agregação


Dependendo de suas necessidades, você também pode usar o $group operador de agregação para retornar valores distintos.

Exemplo:
db.pets.aggregate( [ { $group : { _id : "$type" } } ] )

Resultado:
{ "_id" : "Cat" }
{ "_id" : "Bat" }
{ "_id" : "Dog" }

Neste caso os valores distintos são devolvidos em documentos separados.

Essa abordagem pode ser útil se você espera que seus resultados sejam grandes. Se seus resultados forem maiores que o tamanho máximo do BSON (16 megabytes no momento da gravação), talvez seja necessário usar essa abordagem.