$search
语法
$search
管道阶段采用以下原型形式:
{ $search: { "index": "<index-name>", "<operator-name>"|"<collector-name>": { <operator-specification>|<collector-specification> }, "highlight": { <highlight-options> }, "concurrent": true | false, "count": { <count-options> }, "searchAfter"|"searchBefore": "<encoded-token>", "scoreDetails": true| false, "sort": { <fields-to-sort>: 1 | -1 }, "returnStoredSource": true | false, "tracking": { <tracking-option> } } }
字段
$search
阶段采用包含以下字段的文档:
字段 | 类型 | 必要性 | 说明 |
---|---|---|---|
<collector-name> | 对象 | 可选的 | 用于查询的收集器名称。您可以提供一个包含收集器特定选项的文档作为该字段的值。必须提供此项或 <operator-name> 。 |
concurrent | 布尔 | Optional | |
count | 对象 | Optional | 文件,用于指定检索结果计数的计数选项。 要了解更多信息,请参阅 Count Atlas 搜索结果。 |
highlight | 对象 | Optional | 指定在原始上下文中显示搜索词的高亮选项的文档。 |
index | 字符串 | Optional | 要使用的 Atlas Search 索引的名称。如果省略,则默认值为 如果将索引命名为 如果您写错索引名称,或者指定的索引在集群上尚不存在,则 Atlas Search 不会返回结果。 |
<operator-name> | 对象 | 可选的 | |
returnStoredSource | 布尔 | Optional | 标志,指定是对后端数据库执行完整文档查找,还是直接从 Atlas Search 仅返回存储的源字段。如果省略,则默认值为 false 。 要了解详情,请参阅返回已存储源字段。 |
searchAfter | 字符串 | Optional | |
searchBefore | 字符串 | Optional | |
scoreDetails | 布尔 | Optional | |
sort | 对象 | Optional | 文档,指定按升序或降序对 Atlas Search 结果进行排序的字段。您可以按日期、数字(整数、浮点数和 double)和字符串值排序。要了解详情,请参阅对 Atlas Search 结果进行排序。 |
tracking | 对象 | Optional | 指定用于检索搜索词相关分析信息的跟踪选项的文档。 |
行为
聚合变量
$search
仅返回查询结果。$search
查询的元数据结果保存在 $$SEARCH_META
聚合变量中。您可以使用 $$SEARCH_META
变量查看 $search
查询的元数据结果。
$$SEARCH_META
聚合变量可以用在任何管道中 $search
阶段之后的任何地方,但不能用在任何管道中 $lookup
或 $unionWith
阶段之后。从 MongoDB 6.0 开始,$$SEARCH_META
聚合变量不能在 $searchMeta
阶段之后的任何后续阶段使用。
例子
假设 sample_mflix.movies
集合上有如下索引。
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
以下查询使用 $search
阶段搜索在 2011 年 9 月 01 日前后上映的电影。查询包括:
$project
阶段,用来排除文档中除title
和released
之外的所有字段。$facet
阶段,将输出:docs
字段,其中包含由前5
项搜索结果组成的数组meta
值为$$SEARCH_META
变量的字段
db.movies.aggregate([ { "$search": { "near": { "path": "released", "origin": ISODate("2011-09-01T00:00:00.000+00:00"), "pivot": 7776000000 } } }, { $project: { "_id": 0, "title": 1, "released": 1 } }, { "$limit": 5 }, { "$facet": { "docs": [], "meta": [ {"$replaceWith": "$$SEARCH_META"}, {"$limit": 1} ] } } ])
{ "docs" : [ { "title" : "Submarino", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Devil's Playground", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Bag It", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Dos", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "We Were Here", "released" : ISODate("2011-09-01T00:00:00Z") } ], "meta" : [ { "count" : { "lowerBound" : NumberLong(17373) } } ] }
要了解有关 $$SEARCH_META
变量及其用法的更多信息,请参阅:
故障排除
如果您在使用 Atlas Search $search
查询时遇到问题,请参阅排除 Atlas Search 错误。