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: