Especifique documentos a serem devolvidos
Nesta página
Visão geral
Neste guia, você pode aprender como especificar quais documentos retornar de uma operação de leitura usando os seguintes métodos:
mongocxx::options::find::limit(): especifica o número máximo de documentos para retornar de uma query.
mongocxx::options::find::sort(): especifica a ordem de classificação para os documentos retornados.
mongocxx::options::find::skip(): especifica o número de documentos a ignorar antes de retornar os resultados da query.
Dados de amostra
Os exemplos neste guia utilizam a coleção restaurants
no banco de dados do sample_restaurants
a partir dos conjuntos de banco de dados de amostra do Atlas. Para acessar essa coleção a partir do seu aplicação C++ , instancie um mongocxx::client
que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis db
e collection
:
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
Limite
Para especificar o número máximo de documentos retornados de uma operação de leitura, crie uma instância da classe mongocxx::options::find
e defina seu campo limit
. Em seguida, passe sua instância mongocxx::options::find
como argumento para o método find()
.
O exemplo a seguir encontra todos os restaurantes que têm um cuisine
valor de campo de "Italian"
e limita os resultados a 5
documentos:
mongocxx::options::find opts{}; opts.limit(5); auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Philadelphia Grille Express", "restaurant_id" : "40364305" } { "_id" : { "$oid" : "..." }, ..., "name" : "Isle Of Capri Restaurant", "restaurant_id" : "40364373" } { "_id" : { "$oid" : "..." }, ..., "name" : "Marchis Restaurant", "restaurant_id" : "40364668" } { "_id" : { "$oid" : "..." }, ..., "name" : "Crystal Room", "restaurant_id" : "40365013" } { "_id" : { "$oid" : "..." }, ..., "name" : "Forlinis Restaurant", "restaurant_id" : "40365098" }
Dica
O exemplo anterior retorna os cinco primeiros documentos correspondidos pela query de acordo com sua ordem natural no banco de banco de dados. A seção a seguir descreve como devolver os documentos em uma ordem especificada.
Sort
Para retornar documentos em uma ordem especificada, crie um documento que inclua o campo para classificar os resultados e a direção de classificação. Um valor de 1
classifica os valores do mais baixo para o mais alto, e um valor de -1
os classifica do mais alto para o mais baixo. Em seguida, chame o método mongocxx::options::find::sort()
em uma instância mongocxx::options::find
e passe este documento como argumento.
O exemplo a seguir retorna todos os documentos que têm "Italian"
cuisine
de , classificados em ordem crescente de name
campo :
mongocxx::options::find opts{}; opts.sort(make_document(kvp("name", 1))); auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "(Lewis Drug Store) Locanda Vini E Olii", "restaurant_id" : "40804423" } { "_id" : { "$oid" : "..." }, ..., "name" : "101 Restaurant And Bar", "restaurant_id" : "40560108" } { "_id" : { "$oid" : "..." }, ..., "name" : "44 Sw Ristorante & Bar", "restaurant_id" : "40698807" } ... { "_id" : { "$oid" : "..." }, ..., "name" : "Zucchero E Pomodori", "restaurant_id" : "41189590" }
Ignorar
Para ignorar um número especificado de documentos antes de retornar os resultados da query, crie uma instância da classe mongocxx::options::find
e defina seu campo skip
. Em seguida, passe sua instância mongocxx::options::find
como argumento para o método find()
.
O exemplo a seguir retorna todos os documentos que têm um valor de campo borough
de "Manhattan"
e ignora os primeiros 10
documentos:
mongocxx::options::find opts{}; opts.skip(10); auto cursor = collection.find(make_document(kvp("borough", "Manhattan")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Cafe Metro", "restaurant_id" : "40363298" } { "_id" : { "$oid" : "..." }, ..., "name" : "Lexler Deli", "restaurant_id" : "40363426" } { "_id" : { "$oid" : "..." }, ..., "name" : "Domino'S Pizza", "restaurant_id" : "40363644" } ...
Combinar Limite, Classificar e Ignorar
Você pode definir os campos limit
, sort
e skip
de uma única instância mongocxx::options::find
. Isso permite que você defina um número máximo de documentos classificados para retornar, ignorando um número específico de documentos antes de retornar.
O exemplo a seguir retorna 5
documentos com um valor cuisine
de "Italian"
. Os resultados são classificados em ordem crescente por valor de campo name
, ignorando os primeiros 10
documentos:
mongocxx::options::find opts{}; opts.sort(make_document(kvp("name", 1))).limit(5).skip(10); auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Acqua", "restaurant_id" : "40871070" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acqua Restaurant", "restaurant_id" : "41591488" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acqua Santa", "restaurant_id" : "40735858" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acquista Trattoria", "restaurant_id" : "40813992" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acquolina Catering", "restaurant_id" : "41381423" }
Observação
A ordem em que você chama esses métodos não altera os documentos que são devolvidos. O driver reordena automaticamente as chamadas para executar primeiro a operação de classificação, a operação de ignorar em seguida e, em seguida, a operação de limite.
Informações adicionais
Para obter mais informações sobre a recuperação de documentos, consulte o guia Recuperar dados .
Para obter mais informações sobre como especificar uma query, consulte o guia Especificar uma query .
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: