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
.
Exemplo
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