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

指定查询

在此页面上

  • Overview
  • 样本数据
  • 精确匹配
  • 比较操作符。
  • 逻辑操作符
  • 数组操作符
  • 元素操作符
  • 评估操作符
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何使用C++驾驶员指定查询。

您可以通过创建查询过滤来优化查询返回的文档设立。 查询过滤是一个表达式,用于指定MongoDB在读取或写入操作中用于匹配文档的搜索条件。 在查询过滤中,您可以提示驾驶员搜索与查询完全匹配的文档,也可以组合查询筛选器以Express更复杂的匹配条件。

本指南中的示例对名为 fruits的集合运行操作,该集合包含表示水果的文档。 以下代码示例展示了如何创建数据库和集合,然后将示例文档插入集合:

mongocxx::uri uri("<connection string>");
mongocxx::client client(uri);
auto db = client["db"];
auto collection = db["fruits"];
std::vector<bsoncxx::document::value> fruits;
fruits.push_back(make_document(kvp("_id", 1), kvp("name", "apples"), kvp("qty", 5), kvp("rating", 3), kvp("color", "red"), kvp("type", make_array("fuji", "honeycrisp"))));
fruits.push_back(make_document(kvp("_id", 2), kvp("name", "bananas"), kvp("qty", 7), kvp("rating", 4), kvp("color", "yellow"), kvp("type", make_array("cavendish"))));
fruits.push_back(make_document(kvp("_id", 3), kvp("name", "oranges"), kvp("qty", 6), kvp("rating", 2), kvp("type", make_array("naval", "mandarin"))));
fruits.push_back(make_document(kvp("_id", 4), kvp("name", "pineapples"), kvp("qty", 3), kvp("rating", 5), kvp("color", "yellow")));
auto result = collection.insert_many(fruits);

注意

mongocxx::实例

本页上的代码示例假定您已在应用程序的其他位置创建了mongocxx::instance对象。

要学习;了解有关创建实例的更多信息,请参阅创建驱动程序实例。

字面值查询返回与查询过滤完全匹配的文档。

以下示例将查询过滤指定为find()方法的参数。 此代码会返回color字段的值为"yellow"的所有文档:

auto cursor = collection.find(make_document(kvp("color", "yellow")));
for (auto &&doc : cursor)
{
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapple", "qty" : 3, "rating" : 5, "color" : "yellow" }

提示

查找所有文档

要查找集合中的所有文档,请调用find()方法并向其传递一个空的查询筛选器。 以下示例查找集合中的所有文档:

auto cursor = collection.find({});

比较操作符会根据查询过滤中的指定值评估文档字段值。 以下列表定义了常见的比较操作符:

  • $gt:大于

  • $lte:小于或等于

  • $ne:不等于

要查看比较操作符的完整列表,请参阅 MongoDB Server 手册中的比较查询操作符指南。

以下示例将查询过滤中的操作符指定为find()方法的参数。 此代码会返回rating字段值大于2的所有文档:

auto cursor = collection.find(make_document(kvp("rating", make_document(kvp("$gt", 2)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

逻辑操作符通过使用应用于两组或多组表达式结果的逻辑来匹配文档。 以下列表描述了每个逻辑操作符:

  • $and:返回符合所有子句条件的所有文档

  • $or:返回符合一个子句条件的所有文档

  • $nor:返回所有符合任何子句条件的文档

  • $not:返回与表达式匹配的所有文档

要了解有关逻辑操作符的更多信息,请参阅 MongoDB Server 手册中的逻辑查询操作符指南。

以下示例将查询过滤中的逻辑操作符指定为find()方法的参数。 此代码会返回qty字段值大于5color字段值为"yellow"的所有文档:

auto cursor = collection.find(
make_document(kvp("$or",
make_array(make_document(kvp("qty", make_document(kvp("$gt", 5)))),
make_document(kvp("color", "yellow"))))));
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 3, "name" : "oranges", "qty" : 6, "rating" : 2, "type" : [ "naval", "mandarin" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

数组操作符根据大量字段中元素的值或数量来匹配文档。 以下列表描述了可用的大量操作符:

  • $all:返回具有包含查询中所有元素的数组的文档

  • $elemMatch:如果大量字段中的元素与查询中的所有条件匹配,则返回文档

  • $size:返回包含指定大小数组的所有文档

要了解有关数组操作符的更多信息,请参阅 MongoDB Server 手册中的数组查询操作符指南。

以下示例将查询过滤中的大量操作符指定为find()方法的参数。 此代码会返回type大量字段包含2元素的所有文档:

auto cursor = collection.find(make_document(kvp("type", make_document(kvp("$size", 2)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 3, "name" : "oranges", "qty" : 6, "rating" : 2, "type" : [ "naval", "mandarin" ] }

元素操作符根据字段的存在或类型查询数据。

要了解有关元素操作符的更多信息,请参阅 MongoDB Server 手册中的元素查询操作符指南。

以下示例将查询筛选器中的元素操作符指定为find()方法的参数。 此代码将返回所有具有color字段的文档:

auto cursor = collection.find(make_document(kvp("color", make_document(kvp("$exists", true)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

求值操作符根据对单个字段或整个文集文件的求值结果返回数据。

以下列表描述了常见的评估操作符:

  • $text:对文档执行文本搜索

  • $regex:返回与指定正则表达式匹配的文档

  • $mod:对字段值执行模运算,并返回余数为指定值的文档

要查看评估操作符的完整列表,请参阅 MongoDB Server 手册中的评估查询操作符指南。

以下示例将查询过滤中的评估操作符指定为find()方法的参数。 此代码使用正则表达式返回name字段值至少包含两个连续"p"字符的所有文档:

auto cursor = collection.find(make_document(kvp("name", make_document(kvp("$regex", "p{2,}")))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

要了解有关查询文档的更多信息,请参阅 MongoDB Server 手册中的查询文档指南。

要学习;了解有关使用C++驾驶员检索文档的更多信息,请参阅检索数据指南。

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

后退

Retrieve Data