Docs 菜单
Docs 主页
/ /

$search

$search

$search 阶段对指定的字段或多个字段执行全文搜索。字段或多个字段必须由MongoDB 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
},
"returnScope": {
"path": "<embedded-documents-field-to-retrieve>"
}
"returnStoredSource": true | false,
"tracking": {
<tracking-option>
}
}
}

$search 阶段采用包含以下字段的文档:

字段
类型
必要性
说明

<collector-name>

对象

可选的

用于查询的收集器名称。您可以提供一个包含收集器特定选项的文档作为该字段的值。必须提供此项或 <operator-name>

concurrent

布尔

Optional

专用搜索节点上并行搜索各分段。如果集群上没有单独的搜索节点, MongoDB Search 会忽略此标志。如果省略,则默认为 false。要学习;了解更多信息,请参阅跨分段并行查询执行。

count

对象

Optional

指定用于检索结果计数的计数选项的文档。要学习;了解更多信息,请参阅对MongoDB搜索结果进行计数。

highlight

对象

Optional

指定在原始上下文中显示搜索词的高亮选项的文档。

index

字符串

Optional

要使用的MongoDB Search索引的名称。如果省略,则默认为 default

如果将索引命名为 default,则在使用 $search 管道阶段时无需指定 index 参数。如果您为索引指定了自定义名称,则必须在 index 参数中指定此名称。

如果索引名称拼写错误或者指定的索引在集群上尚不存在,则MongoDB Search 不会返回结果。

<operator-name>

对象

可选的

搜索使用的操作符名称。您可以提供一个包含操作符特定选项的文档作为该字段的值。必须提供此项或 <collector-name>。使用 compound 操作符可运行包含多个操作符的复合查询。

returnScope

对象

Optional

Object that sets the context of the query to the specified embedded document field. You must also specify returnStoredSource and set it to true.

returnStoredSource

布尔

可选的

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 false. Must be true if you specify returnScope.

要了解详情,请参阅返回已存储源字段

searchAfter

字符串

Optional

用于检索结果的参考点。searchAfter 返回紧随指定参考点之后开始的文档。参考点必须是由 $meta 关键字 searchSequenceToken 生成的 Base64 编码令牌。如要了解详情,请参阅对结果进行分页。此字段与 searchBefore 字段互斥。

searchBefore

字符串

Optional

用于检索结果的参考点。searchBefore 返回在指定参考点之前开始的文档。参考点必须是由 $meta 关键字 searchSequenceToken 生成的 Base64 编码令牌。要了解详情,请参阅分页结果。此字段与 searchAfter 字段互斥。

scoreDetails

布尔

Optional

标志,指定是否检索结果中文档得分的明细。如果省略,则默认值为 false。要查看详情,必须在 $project 阶段中使用 $meta 表达式。要了解更多信息,请参阅返回得分详情。

sort

对象

Optional

文档,指定按升序或降序对MongoDB搜索结果进行排序的字段。您可以按日期、数字(整数、浮点数和双精度值)和字符串值进行排序。 要学习;了解更多信息,请参阅对MongoDB搜索结果进行排序。

tracking

对象

Optional

指定用于检索搜索词相关分析信息的跟踪选项的文档。

警告:此功能现已弃用。官方技术支持将于 2025 年 5 月正式终止并全面停止服务。因此,Atlas 将于该日期起停止收集用于 Atlas UI 展示的查询数据,且相关功能的用户界面将被删除。如果您有任何问题或需要进一步帮助,请联系支持或客户经理。

$search 必须是其所在的任何管道中的第一阶段。$search 不能用于以下场合中:

  • 视图定义

  • $facet 管道阶段

$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 阶段,用来排除文档中除 titlereleased 之外的所有字段。

  • $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 变量及其用法的更多信息,请参阅:

如果您在使用MongoDB Search $search 查询时遇到问题,请参阅查询故障排除。

后退

管道阶段

在此页面上