对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

如何对嵌入式文档中的字段运行MongoDB搜索查询

本教程演示了如何对文档大量中的字段索引和运行MongoDB搜索查询,即使文档大量本身是嵌套的。要启用对这些字段的查询,请将文档字段索引为 embeddedDocuments 类型。

本页面上的教程演示了如何对以下类型数组中的字段进行查询:

  • 文档数组。

  • 嵌套在文档中的文档数组。

  • 文档数组中的文档数组。

在开始之前,请确保您的集群满足先决条件中描述的要求。

展开此部分以了解更多关于本教程中使用的示例集合、索引和查询的信息。

为了演示如何对嵌入式文档运行查询,本教程将指导您完成以下步骤:

  1. 在集群中创建名为 schools 的示例集合,其中包含嵌入式文档。

  2. 使用在以下路径配置的embeddedDocuments字段设置MongoDB搜索索引:

    • teachers 字段

    • teachers.classes 字段

    • clubs.sports 字段

  3. 运行 $search 查询,使用复合操作符在schools集合中搜索嵌入式文档文本

  4. 针对嵌入式文档字段运行$searchMeta查询以获取计数。

schools示例集合包含三个文档。每个文档包含学校的 namemascot、每位教师的“名”和 last、他们任教的 classes,包括 subjectgrade,以及各种clubs 可用。

此集合的索引指定了以下数组中的文档:

  • teachersteachers.classes 路径的数组中的文档被索引为 embeddedDocuments,文档内的字段会被动态索引。

  • 位于 teachers 路径的数组中的文档也会被索引为文档类型,以支持突出显示,文档内部的字段也会被动态索引。

  • clubs 字段中的文档被索引为启用了动态映射文档类型,clubs.sports 字段中的文档数组被索引为启用了动态映射的 embeddedDocuments 类型。

该示例查询Atlas Search schools 集合中的嵌入式文档。 查询使用以下管道阶段:

  • $search 搜索集合。

  • $project以在集合中包含和排除字段,并在结果中添加名为score的字段。 对于启用突出显示的查询, $project阶段还添加了一个名为highlights的新字段,其中包含突出显示信息。

这些教程演示了以下查询:

该查询演示了针对文档数组内部字段的搜索。

它在 teachers 路径中搜索名字为 John 的教师,并为姓氏为 Smith 的教师指定首选项。它还启用对 last 名称字段的突出显示

该查询演示了针对嵌套在文档中的文档数组内的字段的搜索。

它搜索的是那些拥有体育社团的学校,而这些社团为学生提供了在 clubs.sports 路径上参加 dodgeballfrisbee 比赛的机会。

此查询演示了一个复合查询,用于搜索以下数组中的字段:

  • 文档数组。

  • 嵌套在文档数组中的文档数组。

它会搜索在 teachers.classes 路径上有教师教授 12th 年级 science 课程的学校,优先选择有姓氏为 Smith 的教师教授该课程的学校。它还能高亮显示嵌套在 teachers 文档数组中的classes 文档数组内的subject 字段。

注意

您的集群的教程还包括一个 $searchMeta 查询,用于统计各年级开课学校的数量。

本教程演示了针对嵌入式文档中的字段的MongoDB搜索查询示例。要学习;了解有关这些查询的更多信息,请参阅关于本教程。