Overview
在本指南中,您可以学习如何使用C驱动程序指定查询。
您可以定义查询筛选条件,以便在执行查询时从集合中检索特定文档。查询筛选条件是一个表达式,用于指定MongoDB在读取或写入操作中用于匹配文档的搜索条件。通过定义查询筛选条件,可以指示驱动程序搜索与查询完全匹配的文档,也可以组合查询筛选条件来表达更复杂的匹配条件。
样本数据
本指南中的示例使用来自 Atlas 示例数据集的 sample_mflix 数据库中的 movies 集合。要学习如何创建免费的MongoDB Atlas 集群并加载示例数据集,请参阅MongoDB 入门指南。
精确匹配
字面值查询返回与查询筛选器精确匹配的文档。
以下示例将查询过滤指定为 mongoc_collection_find_with_opts() 函数的参数。 此代码会返回 type字段的值为 "movie" 的所有文档。
const bson_t *doc; bson_t *filter = BCON_NEW("type", BCON_UTF8("movie")); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
比较操作符。
比较运算符会根据查询筛选器中的指定值评估文档字段值。 以下是常见比较操作符的列表:
$gt:大于$lte:小于或等于$ne:不等于
要查看比较操作符的完整列表,请参阅 MongoDB Server 手册中的比较查询操作符指南。
以下示例将查询过滤操作符的比较运算符指定为 mongoc_collection_find_with_opts() 函数的参数。 此代码会返回 year字段的值大于 2015 的所有文档。
const bson_t *doc; bson_t *filter = BCON_NEW("year", "{", "$gt", BCON_INT32(2015), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
逻辑操作符
逻辑操作符通过使用应用于两组或多组表达式结果的逻辑来匹配文档。 以下是逻辑操作符列表:
$and,返回符合所有子句条件的所有文档$or,返回符合一个子句条件的所有文档$nor,返回所有不符合任一子句条件的文档$not,它会返回与表达式不匹配的所有文档
要了解有关逻辑操作符的更多信息,请参阅 MongoDB Server 手册中的逻辑查询操作符指南。
以下示例将查询过滤中的逻辑操作符指定为 mongoc_collection_find_with_opts() 函数的参数。 此代码会返回year 字段的值为1983 或1985 的所有文档。
const bson_t *doc; bson_t *filter = BCON_NEW( "$or", "[", "{", "year", BCON_INT64(1983), "}", "{", "year", BCON_INT64(1985), "}", "]" ); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
数组操作符
数组操作符根据数组字段中元素的值或数量来匹配文档。 以下是可用数组操作符的列表:
$all,它会返回带有数组的文档,而该数组包含查询中的所有元素$elemMatch,如果数组字段中的元素与查询中的所有条件匹配,则返回文档$size,返回包含指定大小数组的所有文档
要了解有关数组操作符的更多信息,请参阅 MongoDB Server 手册中的数组查询操作符指南。
以下示例将查询过滤中的大量操作符符指定为 mongoc_collection_find_with_opts() 函数的参数。 此代码会返回 genres大量字段的值恰好包含 2 个元素的所有文档。
const bson_t *doc; bson_t *filter = BCON_NEW("genres", "{", "$size", BCON_INT32(2), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
元素操作符
元素操作符根据字段的存在或类型查询数据。
要了解有关元素操作符的更多信息,请参阅 MongoDB Server 手册中的元素查询操作符指南。
以下示例将查询过滤中的 $exists操作符指定为 mongoc_collection_find_with_opts() 函数的参数。 该代码返回所有具有 num_mflix_comments字段的文档。
const bson_t *doc; bson_t *filter = BCON_NEW("num_mflix_comments", "{", "$exists", BCON_BOOL(true), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
评估操作符
求值操作符根据对单个字段或整个文集文件的求值结果返回数据。
以下是常见评估操作符的列表:
$text,对文档执行文本Atlas Search$regex,返回与指定正则表达式匹配的文档$mod,它对字段的值执行模运算并返回余数为指定值的文档
要查看评估操作符的完整列表,请参阅 MongoDB Server 手册中的评估查询操作符指南。
以下示例将查询筛选操作符过滤指定为 mongoc_collection_find_with_opts() 函数的参数。 该代码使用正则表达式返回 title字段的值至少包含两个连续 "p" 字符的所有文档。
const bson_t *doc; bson_t *filter = BCON_NEW("title", "{", "$regex", BCON_UTF8("p{2,}"), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
更多信息
要了解有关查询文档的更多信息,请参阅 MongoDB Server 手册中的查询文档指南。
要学习;了解有关使用C驾驶员检索文档的更多信息,请参阅查找文档。
API 文档
要学习;了解有关 mongoc_collection_find_with_opts() 函数的详情,请参阅API文档。