Overview
En esta guía, puede aprender a recuperar una lista de valores distintos para un campo en una colección llamando al método distinct() Método en un objeto MongoCollection. Pase el nombre del campo del documento como primer parámetro y la clase que desea usar para los resultados como segundo parámetro, como se muestra a continuación:
collection.distinct("countries", String.class);
Puedes especificar un campo en el documento o uno dentro de un documento incrustado usando la notación de punto. La siguiente llamada de método devuelve cada valor distinto del campo wins en el documento incrustado awards:
collection.distinct("awards.wins", Integer.class);
Opcionalmente, puede pasar un filtro de consulta al método para limitar el conjunto de documentos de los cuales su instancia de MongoDB recupera valores distintos de la siguiente manera:
collection.distinct("type", Filters.eq("languages", "French"), String.class);
El método distinct() devuelve un objeto que implementa la interfaz DistinctIterable. Esta interfaz contiene métodos para acceder, organizar y recorrer los resultados. También hereda métodos de su interfaz principal, MongoIterable, como first(), que devuelve el primer resultado, y cursor(), que devuelve una instancia de MongoCursor.
Ejemplo
El siguiente fragmento recupera una lista de valores distintos para el campo de documento year de la colección movies. Utiliza un filtro de consulta para encontrar películas que incluyan "Carl Franklin" como uno de los valores de la matriz directors.
Nota
Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte Guía de conexión.
// 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"); // 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()); } } } }
Al ejecutar el ejemplo, debería ver un resultado que informa cada año distinto para todas las películas en las que Carl Franklin fue incluido como director, que se parece a lo siguiente:
1992 1995 1998 ...
Tip
Legacy API
Si usas la API heredada, consulta la sección de preguntas frecuentes de la guía de la API heredada para conocer los cambios que debes realizar en este ejemplo de código.
Para obtener más información sobre las clases y métodos mencionados en esta página, consulte los siguientes recursos:
distinto() Documentación de la API
Documentación de la API deDistinctIterable
Entrada manual del servidor denotación de puntos
Documentación de la APIMongoIterable