MongoDB com drivers
Definição
Compatibilidade
Esse mĂ©todo está disponĂvel em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, 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
Sintaxe
Este método utiliza os seguintes parâmetros:
Parâmetro | Tipo | Descrição |
|---|---|---|
| string | O campo para o qual retornar valores distintos. |
| documento | Uma query que especifica os documentos a partir dos quais recuperar os valores distintos. |
| documento | Opcional. Um documento que especifica as opções. Consulte Opções. |
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.
O diagrama a seguir mostra um exemplo distinct() chamada.
Opções
{ collation: <document> }
Campo | Tipo | Descrição | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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: Ao especificar agrupamento, o campo Se o agrupamento nĂŁo for especificado, mas a coleção tiver um agrupamento padrĂŁo (consulte 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. |
Comportamento
Em um cluster fragmentado, o comando distinct pode 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.
Campos de array
Se o valor do field especificado for uma array, db.collection.distinct() considerará cada elemento dela como um valor separado.
Por exemplo, se um campo tiver como seu valor [ 1, [1], 1 ], entĂŁo db.collection.distinct() considera 1, [1] e 1 como valores separados.
Para obter um exemplo, consulte Retornar valores distintos para um campo de array.
Uso do Ăndice
Quando possĂvel, as operações do db.collection.distinct() podem usar Ăndices.
Os Ăndices tambĂ©m podem abranger operações db.collection.distinct(). Consulte Executar queries cobertas para obter mais informações sobre queries cobertas por Ăndices.
Transações
Para realizar uma operação distinta dentro de uma transação:
Para coleções não fragmentadas, você pode usar o método
db.collection.distinct()/o comandodistinct, bem como o pipeline de agregação com o estágio$group.Para coleções fragmentadas, você não pode utilizar o método
db.collection.distinct()ou o comandodistinct.Para encontrar os valores distintos de uma pipeline de agregação fragmentada, use o pipeline de agregação com o estágio
$group. Consulte Operação Distinta para detalhes.
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.
DesconexĂŁo do cliente
Se o cliente que emitiu distinct() se desconectar antes da conclusão da operação, o MongoDB marcará distinct() para encerramento usando killOp.
Restrição de estado do membro do conjunto de réplica
Para executar em um nó do conjunto de réplicas, as operações dedistinct exigem que o nó esteja no estado PRIMARY ou SECONDARY. Se o nó estiver em outro estado, como STARTUP2, haverá erros na operação.
Configurações de query
Novidades na versĂŁo 8.0.:
VocĂŞ pode usar as configurações de query para definir dicas de Ăndice, definir filtros de descarte de operação e outros campos. As configurações se aplicam Ă forma de query em todo o cluster. O cluster mantĂ©m as configurações apĂłs o fechamento.
O otimizador de query usa as configurações da query como uma entrada adicional durante o planejamento da query, o que afeta o plano selecionado para executar a query. Você também pode usar as configurações de query para bloquear uma forma de query.
Para adicionar configurações de query e explorar exemplos, consulte setQuerySettings.
Você pode adicionar configurações de consulta para os comandos find, distinct e aggregate.
As configurações de consulta tĂŞm mais funcionalidade e sĂŁo preferidas em relação aos filtros de Ăndice obsoletos.
Para remover as configurações de query, use removeQuerySettings. Para obter as configurações de consulta, use um estágio $querySettings em um pipeline de agregação .
Exemplos
Os exemplos utilizam a coleção inventory que contém os seguintes documentos:
db.inventory.insertMany( [ { _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" ] } ] )
Valores Distintos de Devolução para um Campo
O exemplo seguinte retorna valores distintos para o campo dept :
db.inventory.distinct( "dept" )
A operação retorna:
[ "A", "B" ]
Valores Distintos de Retorno para um Campo Incorporado
O exemplo a seguir retorna valores distintos para o campo item.sku incorporado:
db.inventory.distinct( "item.sku" )
A operação retorna:
[ "111", "222", "333" ]
Dica
Notação de pontos para obter informações sobre como acessar campos em documentos incorporados
Valores Distintos de Retorno para um Campo de Array
O exemplo seguinte retorna valores distintos para o campo de array sizes:
db.inventory.distinct( "sizes" )
A operação retorna:
[ "M", "S", "L" ]
Para informações sobre distinct() e campos de array, consulte a seção Comportamento.
Especificar query com distinct
O exemplo a seguir retorna valores distintos para o campo item.sku incorporado em que dept Ă© igual a "A":
db.inventory.distinct( "item.sku", { dept: "A" } )
A operação retorna:
[ "111", "333" ]
Especificar um agrupamento
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:
db.myColl.insertMany( [ { _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.myColl.distinct( "category", {}, { collation: { locale: "fr", strength: 1 } } )
Para obter descrições sobre os campos de agrupamento, consulte Documento de agrupamento.