Localizar vários documentos
Você pode executar uma query de vários documentos em uma coleção chamando o método find()
em um objeto MongoCollection
. Passe um filtro de query para o método find()
para consultar e retornar documentos que correspondam ao filtro na collection. Se você não incluir um filtro, o MongoDB retornará todos os documentos na collection.
Para obter mais informações sobre como consultar o MongoDB com o driver Java, consulte nosso guia sobre Consulta de documentos.
Você também pode encadear métodos para o método find()
, como sort()
, que organiza os documentos correspondentes em uma ordem especificada e projection()
, que configura os campos incluídos nos documentos retornados.
Para obter mais informações sobre o método sort()
, consulte nosso guia de classificação. Para obter mais informações sobre o método projection()
, consulte nosso guia de projeção
O método find()
retorna uma instância do FindIterable
, uma classe que oferece vários métodos para acessar, organizar e percorrer os resultados. O FindIterable
também herda métodos de sua classe pai, MongoIterable
que implementa o núcleo da interface Java Iterable
.
Você pode chamar o método iterator()
no MongoIterable
para gerar uma instância do MongoCursor
que você pode usar para cruzar os resultados. Você pode chamar métodos no MongoCursor
, como hasNext()
, para conferir se existem resultados adicionais, ou next()
, para gerar o próximo documento da collection. Se nenhum documento corresponder à query, a chamada hasNext()
gerará false
e, portanto, chamar next()
lançará uma exceção.
Se você chamar next()
no iterador depois dele ter gerado o resultado final ou quando não houver resultados, ele lançará uma exceção do tipo java.util.NoSuchElementException
. Sempre use hasNext()
para conferir se existem resultados adicionais antes de chamar next()
.
Exemplo
O trecho a seguir encontra e imprime todos os documentos que correspondem a uma query na collection movies
. Ele usa os seguintes objetos e métodos:
Um filtro de query que é passado para o método
find()
. O filtrolt()
corresponde apenas a filmes com um tempo de duração inferior a 15 minutos.Uma classificação que organiza os documentos retornados em ordem decrescente por título ("Z" antes de "A").
Uma projeção que inclui os objetos nos campos
title
eimdb
, e exclui o campo_id
utilizando o método auxiliarexcludeId()
.
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 o Guia de conexão.
// Retrieves documents that match a query filter by using the Java driver package usage.examples; import static com.mongodb.client.model.Filters.lt; import org.bson.Document; import org.bson.conversions.Bson; 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.Projections; import com.mongodb.client.model.Sorts; public class Find { 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"); // Creates instructions to project two document fields Bson projectionFields = Projections.fields( Projections.include("title", "imdb"), Projections.excludeId()); // Retrieves documents that match the filter, applying a projection and a descending sort to the results MongoCursor<Document> cursor = collection.find(lt("runtime", 15)) .projection(projectionFields) .sort(Sorts.descending("title")).iterator(); // Prints the results of the find operation as JSON try { while(cursor.hasNext()) { System.out.println(cursor.next().toJson()); } } finally { cursor.close(); } } } }
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 mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API: