Docs 菜单
Docs 主页
/
Atlas
/ /

查询参考

MongoDB搜索查询采用 聚合管道阶段的形式。MongoDB Search 提供 $search$searchMeta 阶段,这两个阶段都必须是任何查询管道(包括 $lookup$unionWith 子管道)中的第一阶段。这些阶段可与查询管道中的其他聚合管道阶段结合使用。

根据所选的管道阶段,查询返回全文搜索的搜索结果或关于搜索结果的元数据:

聚合管道阶段
用途

返回全文搜索的搜索结果。

返回关于搜索结果的元数据。

MongoDB Search 还提供可在 $search$searchMeta 聚合管道阶段中使用的查询运算符和收集器。MongoDB Search 操作符允许您从集群上的集合中查找和检索相关数据。收集器返回表示搜索元数据结果的文档。

您可以使用MongoDB Search 操作符来查询词、短语、地理形状和点、数值、类似文档、同义词等。

您还可以使用正则表达式和通配符表达式搜索。The MongoDB Search复合运算符允许您在$search阶段中组合多个操作符,以根据MongoDB Search 返回的文档中必须不得应该出现的内容执行复杂的数据搜索和过滤。您还可以使用复合运算符在$search阶段匹配或过滤文档。在$match $search之后运行 的性能低于使用$search 复合 运算符运行 的性能。

如需了解有关操作符和收集器的更多信息,请参阅操作符和收集器。

mongodmongot 在同一节点上

运行查询时, MongoDB Search 会使用配置的读取偏好(read preference)来识别运行查询的节点。查询首先进入MongoDB进程,对于副本集集群为 mongod,对于分片集群为 mongos

对于副本集集群, MongoDB进程会将查询路由到同一节点上的 mongot。对于分片的集群,您的集群数据跨 mongod 实例进行分区,并且每个 mongot 仅了解同一节点上的 mongod 数据。因此,您无法运行针对特定分片的MongoDB Search 查询。mongos 将查询定向到所有分片,使这些查询成为分散聚集查询。如果您使用区域将分片的集合分布在集群中的一部分分片上,则MongoDB Search 会将查询路由到包含您正在查询的集合的分片的区域,并仅对以下分片运行$search查询,其中集合所在的位置。

MongoDB Search 执行搜索和评分,并将匹配结果的文档ID 和其他搜索元数据返回 mongod。然后,mongod 对匹配结果隐式执行完整文档查找,并将结果返回客户端。

mongodmongot 在不同节点上

运行查询时,查询会首先根据配置的读取偏好进入 mongodmongod 进程通过同一节点上的负载均衡器路由搜索查询,以便将请求分发到所有 mongot 进程。

MongoDB Search mongot进程执行搜索和评分,并将匹配结果的文档ID 和元数据返回给 mongod。然后,mongod 对匹配结果执行完整文档查找,并将结果返回给客户端。如果在查询中使用 $search 并发 选项, MongoDB Search 将启用查询内并行机制。要学习;了解更多信息,请参阅跨分段并行查询执行。

MongoDB Search 将基于相关性的分数与结果设立的每个文档相关联。基于相关性的评分允许MongoDB Search 按从最高分到最低分的顺序返回文档。如果查询术语频繁出现在文档中, MongoDB搜索对文档的评分较高;如果查询术语出现在集合中的许多文档中,MongoDB 搜索的评分较低。MongoDB Search 还支持通过提升、衰减或其他修改选项来自定义基于相关性的默认分数。要学习;了解有关自定义结果分数的更多信息,请参阅对结果中的文档进行评分。

提示

通过观看学习

观看此视频,了解使用MongoDB Search 搜索和跟踪查询的概述。在本视频中,您可以学习;了解有关MongoDB Search 操作符 以及MongoDB Search 如何对结果中的文档进行评分的更多信息。

时长:15 分钟

您可以使用以下客户端创建并运行MongoDB搜索查询:

mongot 不返回任何错误,但在以下情况下返回空结果集: $search查询:

  • 引用了不存在的索引。如果您不在查询中按名称指定索引, MongoDB Search 默认使用名为 default 的索引。如果您没有名为 default 的索引,或者您指定的索引不存在,则MongoDB Search 不会返回错误并返回空结果设立。您可以使用 index 选项按名称指定有效索引。

  • 指定非索引字段。如果您对未编制索引的字段运行查询, MongoDB Search 不会返回错误并返回空结果设立。您必须仅指定索引字段作为 path 参数的值。您可以在集合的索引定义中启用动态映射,以确保自动为集合中的所有可动态索引的字段编制索引。要学习;了解更多信息,请参阅动态映射。

  • 在未索引为 string 类型的字段路径(Field Path)上使用 text操作符。如果字段被索引为 string 以外的MongoDB Search字段类型(例如 stringFacetautocomplete),则MongoDB Search 不会返回错误并返回空结果设立。您必须使用 stringBSON数据类型值作为字符串类型对字段索引,才能使用文本操作符符查询字段。

mongot 如果$search查询出现以下情况,则会返回PlanExecutor错误:

  • 指定作为不正确数据类型进行索引的字段。在这种情况下,如果您运行查询, MongoDB Search 将返回一条错误消息,标识索引不正确的字段及其正确的数据类型。示例:

    PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because
    it was not indexed as a "stringFacet" field.

    示例,要对 stringnumberdate 字段运行facet(MongoDB搜索操作符)查询,请使用相应的MongoDB搜索字段类型为字段创建索引,例如 stringFacetnumberdate。要学习;了解详情,请参阅支持和不支持的数据类型。

后退

索引分区

在此页面上