指定查询
Overview
在本指南中,您可以学习;了解如何使用C驾驶员指定查询。
您可以定义查询过滤,以便在执行查询时从集合中检索特定文档。查询过滤是一个表达式,用于指定MongoDB在读取或写入操作中用于匹配文档的搜索条件。通过定义查询过滤,可以指示驾驶员搜索与查询完全匹配的文档,也可以组合查询筛选器来表达更复杂的匹配条件。
样本数据
本指南中的示例使用 Atlas示例数据集的sample_mflix
数据库中的 movies
集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
精确匹配
字面值查询返回与查询筛选器精确匹配的文档。
以下示例将查询过滤指定为 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);
{ "_id" : { "$oid" : "..." }, "title" : "Wild and Woolly", "type" : "movie", ... } { "_id" : { "$oid" : "..." }, "title" : "The Devil to Pay!", "type" : "movie", ... } { "_id" : { "$oid" : "..." }, "title" : "Traffic in Souls", "type" : "movie", ... } { "_id" : { "$oid" : "..." }, "title" : "Now or Never", "type" : "movie", ... } { "_id" : { "$oid" : "..." }, "title" : "High and Dizzy", "type" : "movie", ... } ...
比较操作符。
比较运算符会根据查询筛选器中的指定值评估文档字段值。 以下是常见比较操作符的列表:
$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);
{ "_id" : ..., "title" : "The Masked Saint", "year" : { "$numberInt" : "2016" }, ... }
逻辑操作符
逻辑操作符通过使用应用于两组或多组表达式结果的逻辑来匹配文档。 以下是逻辑操作符列表:
$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);
{ "_id" : ..., "title" : "Amityville 3-D", "year" : { "$numberInt" : "1983" }, ... } { "_id" : ..., "title" : "Barefoot Gen", "year" : { "$numberInt" : "1983" }, ... } { "_id" : ..., "title" : "Betrayal", "year" : { "$numberInt" : "1983" }, ... } { "_id" : ..., "title" : "You're a Good Man, Charlie Brown", "year" : { "$numberInt" : "1985" }, ... } { "_id" : ..., "title" : "Yes: 9012 Live", "year" : { "$numberInt" : "1985" }, ... } ...
数组操作符
数组操作符根据数组字段中元素的值或数量来匹配文档。 以下是可用数组操作符的列表:
$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);
{ "_id" : ..., "genres" : [ "Comedy", "Romance" ], "title" : "The Devil to Pay!", ... } { "_id" : ..., "genres" : [ "Crime", "Drama" ], "title" : "Traffic in Souls", ... } { "_id" : ..., "genres" : [ "Comedy", "Short" ], "title" : "High and Dizzy", ... } { "_id" : ..., "genres" : [ "Comedy", "Short" ], "title" : "Now or Never", ... } { "_id" : ..., "genres" : [ "Drama", "Romance" ], "title" : "A Woman of Paris: A Drama of Fate", ... } ...
元素操作符
元素操作符根据字段的存在或类型查询数据。
要了解有关元素操作符的更多信息,请参阅 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);
{ "_id" : ..., "num_mflix_comments" : { "$numberInt" : "0" }, "title" : "The Park Is Mine", ...} { "_id" : ..., "num_mflix_comments" : { "$numberInt" : "1" }, "title" : "The Good Father", ... } { "_id" : ..., "num_mflix_comments" : { "$numberInt" : "0" }, "title" : "Alpine Fire", ... } { "_id" : ..., "num_mflix_comments" : { "$numberInt" : "1" }, "title" : "Huang jia shi jie", ... } { "_id" : ..., "num_mflix_comments" : { "$numberInt" : "0" }, "title" : "Twenty Years Later", ... } ...
评估操作符
求值操作符根据对单个字段或整个文集文件的求值结果返回数据。
以下是常见评估操作符的列表:
要查看评估操作符的完整列表,请参阅 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);
{ "_id" : ..., "title" : "He Who Gets Slapped", ... } { "_id" : ..., "title" : "David Copperfield", ... } { "_id" : ..., "title" : "Applause", ... } { "_id" : ..., "title" : "Skippy", ... } { "_id" : ..., "title" : "This Happy Breed", ... } ...
更多信息
要了解有关查询文档的更多信息,请参阅 MongoDB Server 手册中的查询文档指南。
要学习;了解有关使用C驾驶员检索文档的更多信息,请参阅 检索数据。
API 文档
要学习;了解有关mongoc_collection_find_with_opts()
函数的详情,请参阅API文档。