Menu Docs
Página inicial do Docs
/ / /
Driver de sincronização Java
/

Recuperar valores distintos de um campo

Você pode recuperar uma lista de valores distintos para um campo em uma collection chamando o método distinct() em um objeto MongoCollection. Passe o nome do campo do documento como o primeiro parâmetro e a classe para a qual você deseja converter os resultados como o segundo parâmetro, conforme mostrado abaixo:

collection.distinct("countries", String.class);

Você pode especificar um campo no documento ou dentro de um documento incorporado usando a notação de ponto. A chamada de método abaixo gera cada valor distinto do campo wins no documento incorporado de awards:

collection.distinct("awards.wins", Integer.class);

Opcionalmente, você pode passar um filtro de query para o método a fim de limitar o conjunto de documentos dos quais a instância do MongoDB recupera valores distintos, como segue:

collection.distinct("type", Filters.eq("languages", "French"), String.class);

O método distinct() gera um objeto que implementa a interface do DistinctIterable. Essa interface contém métodos para acessar, organizar e cruzar os resultados. Ela também contém métodos da interface principal, MongoIterable, como first(), que gera o primeiro resultado, e cursor(), que gera uma instância de MongoCursor.

O seguinte trecho recupera uma lista de valores distintos para o campo de documento year da collection movies. Ele usa um filtro de query para corresponder a filmes que incluem "Carl Franklin" como um dos valores na array directors.

Observação

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB , consulte oguia de conexão .

// Retrieves distinct values of a field by using the Java driver
package usage.examples;
import org.bson.Document;
import com.mongodb.MongoException;
import com.mongodb.client.DistinctIterable;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
public class Distinct {
public static void main(String[] args) {
// Replace the uri string with your MongoDB deployment's connection string
String uri = "<connection string uri>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
try {
// Retrieves the distinct values of the "year" field present in documents that match the filter
DistinctIterable<Integer> docs = collection.distinct("year", Filters.eq("directors", "Carl Franklin"), Integer.class);
MongoCursor<Integer> results = docs.iterator();
// Prints the distinct "year" values
while(results.hasNext()) {
System.out.println(results.next());
}
// Prints a message if any exceptions occur during the operation
} catch (MongoException me) {
System.err.println("An error occurred: " + me);
}
}
}
}

Ao executar o exemplo, você verá a saída que relata cada ano distinto de todos os filmes que Carl Franklin foi inserido como diretor, que se parece com o seguinte:

1992
1995
1998
...

Dica

Legacy API

Se você estiver usando a API herdada, consulte nossa página de perguntas frequentes para saber quais alterações devem ser feitas nesse exemplo de código.

Para obter informações adicionais sobre as classes e métodos mencionados nesta página, consulte os seguintes recursos:

  • Documentação da APIdistinct()

  • Documentação da API DistinctIterable

  • Notação de ponto Entrada manual do servidor

  • MongoIterable Documentação da API

Voltar

Contagem de documentos