指定要返回的文档
Overview
在本指南中,您可以学习;了解如何使用以下方法指定从读取操作中返回哪些文档:
mongocxx::options::find::limit() :指定查询中返回的最大文档数。
mongocxx::options::find::sort() :指定返回文档的排序顺序。
mongocxx::options::find::skip() :指定在返回查询结果之前要跳过的文档数。
样本数据
本指南中的示例使用Atlas示例数据集的sample_restaurants
数据库中的 restaurants
集合。 要从C++应用程序访问权限此集合,请实例化一个连接到Atlas 集群的mongocxx::client
,并将以下值分配给db
和collection
变量:
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
Limit
要指定读取操作返回的最大文档数,请创建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" }
提示
前面的示例根据文档在数据库中的自然顺序返回查询匹配的前五个文档。 以下部分介绍如何按指定顺序返回文档。
Sort
要按指定顺序返回文档,请创建一个包含对结果进行排序的字段和排序方向的文档。 值为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
实例的limit
、 sort
和skip
字段。 这允许您设立要返回的最大排序文档数,在返回之前跳过指定数量的文档。
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 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: