语法
$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 }, "returnScope": { "path": "<embedded-documents-field-to-retrieve>" } "returnStoredSource": true | false, "tracking": { <tracking-option> } } }
字段
$search 阶段采用包含以下字段的文档:
字段 | 类型 | 必要性 | 说明 |
|---|---|---|---|
| 对象 | 可选的 | 用于查询的收集器名称。您可以提供一个包含收集器特定选项的文档作为该字段的值。必须提供此项或 |
| 布尔 | Optional | 在专用搜索节点上并行搜索各分段。如果集群上没有单独的搜索节点, MongoDB Search 会忽略此标志。如果省略,则默认为 |
| 对象 | Optional | 指定用于检索结果计数的计数选项的文档。要学习;了解更多信息,请参阅对MongoDB搜索结果进行计数。 |
| 对象 | Optional | 指定在原始上下文中显示搜索词的高亮选项的文档。 |
| 字符串 | Optional | 要使用的MongoDB Search索引的名称。如果省略,则默认为 如果将索引命名为 如果索引名称拼写错误或者指定的索引在集群上尚不存在,则MongoDB Search 不会返回结果。 |
| 对象 | 可选的 | |
| 对象 | Optional | Object that sets the context of the query to the specified embedded document field. You must also specify |
| 布尔 | 可选的 | Flag that specifies whether to perform a full document lookup on the backend database or return only stored source fields directly from MongoDB Search. If omitted, defaults to 要了解详情,请参阅返回已存储源字段。 |
| 字符串 | Optional | |
| 字符串 | Optional | |
| 布尔 | Optional | |
| 对象 | Optional | 文档,指定按升序或降序对MongoDB搜索结果进行排序的字段。您可以按日期、数字(整数、浮点数和双精度值)和字符串值进行排序。 要学习;了解更多信息,请参阅对MongoDB搜索结果进行排序。 |
| 对象 | Optional |
行为
聚合变量
$search 仅返回查询结果。$search 查询的元数据结果保存在 $$SEARCH_META 聚合变量中。您可以使用 $$SEARCH_META 变量查看 $search 查询的元数据结果。
$$SEARCH_META聚合变量可在任何管道中$search阶段之后的任何位置使用,但不能在任何管道中$lookup或$unionWith阶段之后使用。$$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 变量及其用法的更多信息,请参阅: