Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

distinct (comando de banco de dados)

distinct

Encontra os valores distintos para um campo especificado em uma única coleção. Retorna um documento que contém uma array de valores distintos e um documento incorporado que contém estatísticas de query e o plano de query.

Dica

mongoshEm, esse comando também pode ser executado por meio do método db.collection.distinct() assistente.

Os métodos auxiliares são convenientes para os mongosh usuários, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados . Nos casos em que a conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Importante

Esse comando tem suporte limitado nos clusters M0 e Flex. Para saber mais, consulte Comandos nĂŁo suportados.

  • MongoDB Enterprise: a versĂŁo autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versĂŁo com cĂłdigo disponĂ­vel, de uso gratuito e autogerenciada do MongoDB

O comando tem a seguinte sintaxe:

db.runCommand(
{
distinct: "<collection>",
key: "<field>",
query: <query>,
readConcern: <read concern document>,
collation: <collation document>,
comment: <any>
}
)

O comando utiliza os seguintes campos:

Campo
Tipo
Descrição

distinct

string

O nome da collection para consultar valores distintos.

key

string

O campo para o qual retornar valores distintos.

query

documento

Opcional. Uma query que especifica os documentos a partir dos quais recuperar os valores distintos.

readConcern

documento

Opcional. Especifica a read concern.

A opção readConcern tem a seguinte sintaxe: readConcern: { level: <value> }

Os possĂ­veis nĂ­veis de read concern sĂŁo:

  • "local". Esse Ă© o read concern padrĂŁo para operações de leitura em relação ao primário e secundários.

  • "available". DisponĂ­vel para operações de leitura em relação Ă s primárias e secundárias. "available" se comporta da mesma forma que "local" em relação aos secundários primários e nĂŁo fragmentados. A query retorna os dados mais recentes da instância.

  • "majority". DisponĂ­vel para conjuntos de rĂ©plica que usam o mecanismo de armazenamento WiredTiger.

  • "linearizable". DisponĂ­vel apenas para operações de leitura no primary.

  • "snapshot". DisponĂ­vel para transações multidocumento e determinadas operações de leitura fora das transações multidocumento.

Para obter mais informações sobre os read concern, consulte Níveis de read concern.

collation

documento

Opcional.

Opcional. Especifica a agrupamento para utilizar para a operação.

A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.

A opção de agrupamento tem a seguinte sintaxe:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Ao especificar agrupamento, o campo locale é obrigatório; todos os outros campos de agrupamento são opcionais. Para obter descrições dos campos, consulte Documento de agrupamento.

Se o agrupamento não for especificado, mas a coleção tiver um agrupamento padrão (consulte db.createCollection()), a operação usará o agrupamento especificado para a coleção.

Se nenhum agrupamento for especificado para a coleção ou para as operações, o MongoDB usa a comparação binária simples usada nas versões anteriores para comparações de strings.

Você não pode especificar vários agrupamentos para uma operação. Por exemplo, você não pode especificar agrupamentos diferentes por campo ou, se estiver realizando uma busca com uma classificação, não poderá usar um agrupamento para a busca e outro para a classificação.

comment

any

Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:

Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).

Observação

Os resultados não devem ser maiores do que o tamanho máximo do BSON. Se seus resultados excederem o tamanho máximo de BSON, use o pipeline de agregação para recuperar valores distintos usando o operador $group, conforme descrito em Recuperar valores distintos com o pipeline de agregação.

Para o mongosh método equivalente, consulte. Para db.collection.distinct() obter métodos wrapper específicos do driver, consulte a documentação do driver .

Em um cluster fragmentado, o comando pode distinct retornar documentos ĂłrfĂŁos.

Para coleções de séries temporais, o comando distinct não consegue fazer uso eficiente dos índices. Em vez disso, use uma agregação $group para agrupar documentos por valores distintos. Para obter detalhes, consulte Limitações de séries temporais.

Se o valor do especificado field for uma array, considera cada elemento da array como um valordistinct separado.

Por exemplo, se um campo tiver como seu [ 1, [1], 1 ] valor, entĂŁo distinct 1considera, [1] e 1 como valores separados.

Iniciando no MongoDB,6.0 o comando retorna os distinct mesmos resultados para collections e visualizações ao utilizar arrays.

Para exemplos, consulte:

Quando possível, as operações do podem utilizardistinct índices.

Os índices também podem abranger distinct operações. Consulte Executar queries cobertas para obter mais informações sobre queries cobertas por índices.

Para realizar uma operação distinta dentro de uma transação:

Importante

Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.

Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.

Se o cliente que emitiu distinct se desconectar antes da conclusão da operação, o MongoDB marcará para distinct encerramento killOp usando.

Para executar em um membro do conjunto de réplicas, distinct as operações do exigem que o membro esteja no estado ou.PRIMARY Se o membro estiver em SECONDARY STARTUP2 outro estado, como, os erros de operação.

Iniciando no MongoDB 6.0, um filtro de índice utiliza a coleção definida anteriormente utilizando o comando planCacheSetFilter.

Os exemplos utilizam a coleção inventory que contém os seguintes documentos:

{ "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
{ "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
{ "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
{ "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }

O exemplo a seguir retorna valores dept distintos da coleção inventory:

db.runCommand ( { distinct: "inventory", key: "dept" } )

O comando retorna um documento com um campo values contendo os valores dept distintos:

{
"values" : [ "A", "B" ],
"ok" : 1
}

O exemplo a seguir retorna valores distintos para o campo incorporado item.sku da coleção inventory:

db.runCommand ( { distinct: "inventory", key: "item.sku" } )

O comando retorna um documento com um campo values contendo os valores sku distintos:

{
"values" : [ "111", "222", "333" ],
"ok" : 1
}

Dica

Notação de pontos para obter informações sobre como acessar campos em documentos incorporados

O exemplo a seguir retorna valores sizes distintos da coleção inventory:

db.runCommand ( { distinct: "inventory", key: "sizes" } )

O comando retorna um documento com um campo values contendo os valores sizes distintos:

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

Para informações sobre e campos de distinct array, consulte a seção Comportamento.

Iniciando no MongoDB,6.0 o comando retorna os distinct mesmos resultados para collections e visualizações ao utilizar arrays.

O exemplo a seguir cria uma collection chamada sensor com uma array de valores de temperatura para cada documento:

db.sensor.insertMany( [
{ _id: 0, temperatures: [ { value: 1 }, { value: 4 } ] },
{ _id: 1, temperatures: [ { value: 2 }, { value: 8 } ] },
{ _id: 2, temperatures: [ { value: 3 }, { value: 12 } ] },
{ _id: 3, temperatures: [ { value: 1 }, { value: 4 } ] }
] )

O exemplo seguinte cria uma visualização denominada sensorView a partir da collection sensor:

db.createView( "sensorView", "sensor", [] )

O exemplo a seguir usa para retornar os valores exclusivos distinct da temperatures array na sensor collection:

db.sensor.distinct( "temperatures.1.value" )

O 1 em temperatures.1.value especifica o Ă­ndice da array temperatures.

SaĂ­da de exemplo:

[ 4, 8, 12 ]

Exemplo para sensorView:

db.sensorView.distinct( "temperatures.1.value" )

SaĂ­da de exemplo:

  • [ 4, 8, 12 ] começando no MongoDB 6.0 (idĂŞntico ao resultado retornado da collection sensor ).

  • [] em versões MongoDB anteriores a 6.0.

O exemplo a seguir retorna valores distintos para o campo item.sku incorporado em que dept Ă© igual a "A":

db.runCommand ( { distinct: "inventory", key: "item.sku", query: { dept: "A"} } )

O comando retorna um documento com um campo values contendo os valores sku distintos:

{
"values" : [ "111", "333" ],
"ok" : 1
}

A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.

Uma coleção myColl possui os seguintes documentos:

{ _id: 1, category: "café", status: "A" }
{ _id: 2, category: "cafe", status: "a" }
{ _id: 3, category: "cafE", status: "a" }

A seguinte operação de aggregation inclui a opção Agrupamento:

db.runCommand(
{
distinct: "myColl",
key: "category",
collation: { locale: "fr", strength: 1 }
}
)

Para obter descrições sobre os campos de agrupamento, consulte Documento de agrupamento.

Para substituir o nível de preocupação de leitura padrão do "local", utilize a opção readConcern.

A operação a seguir em um conjunto de réplicas especifica uma read concern de "majority" para ler a cópia mais recente dos dados confirmados como tendo sido gravados na maioria dos nós.

Observação

Independentemente do nĂ­vel de read concern, os dados mais recentes em um nĂł podem nĂŁo refletir a versĂŁo mais recente dos dados no sistema.

db.runCommand(
{
distinct: "restaurants",
key: "rating",
query: { cuisine: "italian" },
readConcern: { level: "majority" }
}
)

Para garantir que um único thread possa ler suas próprias gravações, use "majority" read concern e "majority" write concern em relação ao primário do conjunto de réplicas.