Docs 菜单
Docs 主页
/ / /
C++ 驱动程序
/

指定要返回的文档

在此页面上

  • Overview
  • 样本数据
  • Limit
  • Sort
  • 跳过
  • 组合限制、排序和跳过
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何使用以下方法指定从读取操作中返回哪些文档:

  • mongocxx::options::find::limit() :指定查询中返回的最大文档数。

  • mongocxx::options::find::sort() :指定返回文档的排序顺序。

  • mongocxx::options::find::skip() :指定在返回查询结果之前要跳过的文档数。

本指南中的示例使用Atlas示例数据集sample_restaurants数据库中的 restaurants集合。 要从C++应用程序访问权限此集合,请实例化一个连接到Atlas 集群的mongocxx::client ,并将以下值分配给dbcollection变量:

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

要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。

要指定读取操作返回的最大文档数,请创建mongocxx::options::find类的实例并设立其limit字段。 然后,将mongocxx::options::find实例作为参数传递给find()方法。

以下示例查找cuisine字段值为"Italian"的所有餐厅,并将结果限制为5文档:

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" }

提示

前面的示例根据文档在数据库中的自然顺序返回查询匹配的前五个文档。 以下部分介绍如何按指定顺序返回文档。

要按指定顺序返回文档,请创建一个包含对结果进行排序的字段和排序方向的文档。 值为1时,按从低到高的顺序排序;值为-1时,按从高到低的顺序排序。 然后,对mongocxx::options::find实例调用mongocxx::options::find::sort()方法,并将此文档作为参数传递。

以下示例返回cuisine值为"Italian"的所有文档,并按name字段值的升序排序:

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" }

要在返回查询结果之前跳过指定数量的文档,请创建mongocxx::options::find类的实例并设立其skip字段。 然后,将mongocxx::options::find实例作为参数传递给find()方法。

以下示例返回borough字段值为"Manhattan"的所有文档并跳过前10文档:

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" }
...

您可以设立单个mongocxx::options::find实例的limitsortskip字段。 这允许您设立要返回的最大排序文档数,在返回之前跳过指定数量的文档。

5以下示例返回cuisine 值为"Italian" 的 文档。结果按name字段值升序排序,并跳过前10文档:

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" }

注意

调用这些方法的顺序不会更改返回的文档。 驾驶员会自动对调用重新排序,以首先执行排序操作,然后执行跳过操作,然后执行限制操作。

有关检索文档的更多信息,请参阅检索数据指南。

有关指定查询的更多信息,请参阅“指定查询”指南。

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

指定查询