Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Acessar dados de um cursor

Neste guia, você pode aprender como acessar dados de um cursor usando o driver C++ .

Um cursor é um mecanismo que retorna os resultados de uma operação de leitura em lotes iteráveis. Os cursores reduzem o consumo de memória e o uso da largura de banda da rede, mantendo apenas um subconjunto de documentos a qualquer momento, em vez de retornar todos os documentos de uma só vez.

Sempre que o driver C++ executa uma operação de leitura usando o método find() , ele retorna os documentos correspondentes em uma instância mongocxx::cursor .

The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your C++ application, instantiate a mongocxx::client that connects to an Atlas cluster and assign the following values to your db and collection variables:

auto db = client["sample_restaurants"];
auto collection = db["restaurants"];

Para aprender a criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o Guia de Introdução do MongoDB.

Para iterar sobre o conteúdo de uma instância do mongocxx::cursor , utilize um loop do for .

O exemplo seguinte utiliza o método find() para recuperar todos os documentos que têm um valor name de "Dunkin' Donuts". Em seguida, ele imprime cada documento do cursor retornado pelo método find() :

auto cursor = collection.find(make_document(kvp("name", "Dunkin' Donuts")));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : { "$oid" : "..." }, ... "name" : "Dunkin' Donuts", "restaurant_id" : "40379573" }
{ "_id" : { "$oid" : "..." }, ... "name" : "Dunkin' Donuts", "restaurant_id" : "40363098" }
{ "_id" : { "$oid" : "..." }, ... "name" : "Dunkin' Donuts", "restaurant_id" : "40395071" }
...

Para recuperar um documento individual de um cursor, chame o método begin() em uma instância mongocxx::cursor . Este método retorna uma instância de mongocxx::cursor::iterator que aponta para o primeiro documento no cursor.

O exemplo a seguir encontra todos os documentos em uma name que têm um "Dunkin' Donuts" de . Em seguida, ele imprime o primeiro documento do cursor chamando o método begin() :

auto cursor = collection.find(make_document(kvp("name", "Dunkin' Donuts")));
auto doc = cursor.begin();
std::cout << bsoncxx::to_json(*doc) << std::endl;
{ "_id" : { "$oid" : "..." }, ... "name" : "Dunkin' Donuts", "restaurant_id" : "40379573" }

When querying on a capped collection, you can use a tailable cursor that remains open after the client exhausts the results in a cursor. To create a tailable cursor, instantiate a mongocxx::options::find object and set its cursor_type field to mongocxx::cursor::type::k_tailable. Then, pass your mongocxx::options::find instance as an argument to the find() method.

Por exemplo, você pode criar uma collection limitada chamada vegetables que armazena documentos que representam Legumes, conforme mostrado no código a seguir:

auto db = client["db"];
auto collection = db.create_collection("vegetables", make_document(kvp("capped", true), kvp("size", 1024 * 1024)));
std::vector<bsoncxx::document::value> vegetables;
vegetables.push_back(make_document(kvp("name", "cauliflower")));
vegetables.push_back(make_document(kvp("name", "zucchini")));
auto result = collection.insert_many(vegetables);

O código a seguir usa um cursor persistente para recuperar todos os documentos na coleção vegetables . Depois que o cursor estiver esgotado, ele permanecerá aberto até a recuperação de três documentos:

mongocxx::options::find opts{};
opts.cursor_type(mongocxx::cursor::type::k_tailable);
auto cursor = collection.find({}, opts);
int docs_found = 0;
while (docs_found < 3) {
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
docs_found++;
}
// Sleeps for 100 milliseconds before trying to access more documents
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
{ "_id" : { "$oid" : "..." }, "name" : "cauliflower" }
{ "_id" : { "$oid" : "..." }, "name" : "zucchini" }

Se você inserir outro documento na coleção vegetables , o código anterior imprimirá o novo documento e fechará o loop while .

To learn more about tailable cursors, see the Tailable Cursors guide in the MongoDB Server manual.

Para saber mais sobre as operações de leitura, consulte o guia Retrieve Data (Recuperar dados ).

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: