Elastic MongoDB 连接器参考

编辑

Elastic MongoDB 连接器是一个用于 MongoDB 数据源的连接器。此连接器使用 Elastic 连接器框架以 Python 编写。

查看此连接器的源代码(分支8.17,与 Elastic 8.17 兼容)。

Elastic 托管连接器参考

编辑
查看 Elastic 托管连接器参考
可用性和先决条件
编辑

此连接器在 Elastic 版本 8.5.0 及更高版本中作为托管连接器提供。

要在 Elastic Cloud 中本地使用此连接器,请满足所有托管连接器要求

兼容性
编辑

此连接器与 MongoDB AtlasMongoDB 3.6 及更高版本兼容。

数据源和您的 Elastic 部署必须能够通过网络相互通信。

配置
编辑

每次创建要由此连接器管理的索引时,您都将创建一个新的连接器配置。您将需要有关数据源的部分或全部以下信息。

服务器主机名

MongoDB 主机的 URI。示例

用户名

连接器将使用的 MongoDB 用户名。

用户必须有权访问配置的数据库和集合。您可能希望为每个连接器创建一个专用的只读用户。

密码
连接器将使用的 MongoDB 密码。
数据库
要同步的 MongoDB 数据库。必须可以使用配置的用户名和密码访问该数据库。
集合
要同步的 MongoDB 集合。该集合必须存在于配置的数据库中。必须可以使用配置的用户名和密码访问该集合。
直接连接
切换以使用 MongoDB 客户端的直接连接选项。默认禁用。
SSL/TLS 连接

切换以使用 SSL/TLS 加密与 MongoDB 服务器建立安全连接。确保您的 MongoDB 部署支持 SSL/TLS 连接。如果您的 MongoDB 集群使用 DNS SRV 记录(即 MongoDB Atlas 用户),则启用此项。

默认禁用。

证书颁发机构 (.pem)
指定证书颁发机构的根证书。证书的值用于验证 MongoDB 实例提供的证书。

Atlas 用户可以将其留空,因为Atlas 使用广泛信任的根 CA

跳过证书验证
跳过各种证书验证(如果启用了 SSL)。默认禁用。

我们强烈建议在生产环境中禁用此选项。

创建 MongoDB 连接器
编辑

使用 UI

编辑

要创建新的 MongoDB 连接器

  1. 在 Kibana UI 中,从主菜单导航到 搜索 → 内容 → 连接器 页面,或使用全局搜索字段
  2. 按照说明创建新的原生 MongoDB 连接器。

有关其他操作,请参阅Kibana 中的连接器 UI

使用 API

编辑

您可以使用 Elasticsearch 创建连接器 API来创建新的原生 MongoDB 连接器。

例如

resp = client.connector.put(
    connector_id="my-{service-name-stub}-connector",
    index_name="my-elasticsearch-index",
    name="Content synced from {service-name}",
    service_type="{service-name-stub}",
    is_native=True,
)
print(resp)
const response = await client.connector.put({
  connector_id: "my-{service-name-stub}-connector",
  index_name: "my-elasticsearch-index",
  name: "Content synced from {service-name}",
  service_type: "{service-name-stub}",
  is_native: true,
});
console.log(response);
PUT _connector/my-mongodb-connector
{
  "index_name": "my-elasticsearch-index",
  "name": "Content synced from MongoDB",
  "service_type": "mongodb",
  "is_native": true
}
您还需要为连接器创建一个 API 密钥以供使用。

用户需要集群权限 manage_api_keymanage_connectorwrite_connector_secrets 才能以编程方式生成 API 密钥。

要为连接器创建 API 密钥

  1. 运行以下命令,替换指示的值。请注意响应返回的 idencoded

    resp = client.security.create_api_key(
        name="my-connector-api-key",
        role_descriptors={
            "my-connector-connector-role": {
                "cluster": [
                    "monitor",
                    "manage_connector"
                ],
                "indices": [
                    {
                        "names": [
                            "my-index_name",
                            ".search-acl-filter-my-index_name",
                            ".elastic-connectors*"
                        ],
                        "privileges": [
                            "all"
                        ],
                        "allow_restricted_indices": False
                    }
                ]
            }
        },
    )
    print(resp)
    const response = await client.security.createApiKey({
      name: "my-connector-api-key",
      role_descriptors: {
        "my-connector-connector-role": {
          cluster: ["monitor", "manage_connector"],
          indices: [
            {
              names: [
                "my-index_name",
                ".search-acl-filter-my-index_name",
                ".elastic-connectors*",
              ],
              privileges: ["all"],
              allow_restricted_indices: false,
            },
          ],
        },
      },
    });
    console.log(response);
    POST /_security/api_key
    {
      "name": "my-connector-api-key",
      "role_descriptors": {
        "my-connector-connector-role": {
          "cluster": [
            "monitor",
            "manage_connector"
          ],
          "indices": [
            {
              "names": [
                "my-index_name",
                ".search-acl-filter-my-index_name",
                ".elastic-connectors*"
              ],
              "privileges": [
                "all"
              ],
              "allow_restricted_indices": false
            }
          ]
        }
      }
    }
  2. 使用 encoded 值存储连接器密钥,并注意此响应返回的 id

    resp = client.connector.secret_post(
        body={
            "value": "encoded_api_key"
        },
    )
    print(resp)
    const response = await client.connector.secretPost({
      body: {
        value: "encoded_api_key",
      },
    });
    console.log(response);
    POST _connector/_secret
    {
      "value": "encoded_api_key"
    }
  3. 使用 API 密钥 id 和连接器密钥 id 来更新连接器

    resp = client.connector.update_api_key_id(
        connector_id="my_connector_id>",
        api_key_id="API key_id",
        api_key_secret_id="secret_id",
    )
    print(resp)
    const response = await client.connector.updateApiKeyId({
      connector_id: "my_connector_id>",
      api_key_id: "API key_id",
      api_key_secret_id: "secret_id",
    });
    console.log(response);
    PUT /_connector/my_connector_id>/_api_key_id
    {
      "api_key_id": "API key_id",
      "api_key_secret_id": "secret_id"
    }

有关所有可用的连接器 API 的详细信息,请参阅 Elasticsearch API 文档

用法
编辑

要将此连接器用作托管连接器,请使用连接器工作流程。请参阅Elastic 托管连接器

有关其他操作,请参阅Kibana 中的连接器 UI

示例
编辑

此连接器有一个示例。请参阅托管连接器教程 (MongoDB)

已知问题
编辑
必须为 MongoDB Atlas 启用 SSL
编辑
  • 8.12.0 中引入的错误导致连接器无法同步 Mongo Atlas url(mongo+srv),除非启用了 SSL/TLS。
聚合管道中的表达式和变量
编辑

无法在聚合管道内使用像 new Date() 这样的表达式。这些表达式不会由底层 MongoDB 客户端评估,而是作为字符串传递到 MongoDB 实例。一种可能的解决方法是使用聚合变量

不正确(new Date() 将被解释为字符串)

{
    "aggregate": {
        "pipeline": [
            {
                "$match": {
                  "expiresAt": {
                    "$gte": "new Date()"
                  }
                }
            }
        ]
    }
}

正确(使用 $$NOW

{
  "aggregate": {
    "pipeline": [
      {
        "$addFields": {
          "current_date": {
            "$toDate": "$$NOW"
          }
        }
      },
      {
        "$match": {
          "$expr": {
            "$gte": [
              "$expiresAt",
              "$current_date"
            ]
          }
        }
      }
    ]
  }
}
使用自签名或自定义 CA TLS 证书连接
编辑

目前,MongoDB 连接器在连接到自托管的 MongoDB 主机时不支持使用自签名或自定义 CA 证书。

以下解决方法不应在生产中使用。

这可以在开发环境中通过将某些查询参数附加到配置的主机来解决。

例如,如果您的主机是 mongodb+srv://my.mongo.host.com,则附加 ?tls=true&tlsAllowInvalidCertificates=true 将允许禁用 TLS 证书验证。

此示例中的完整主机将如下所示

mongodb+srv://my.mongo.host.com/?tls=true&tlsAllowInvalidCertificates=true

有关影响所有连接器的任何问题,请参阅已知问题

故障排除
编辑

请参阅故障排除

安全性
编辑

请参阅安全性

文档和同步
编辑

以下描述了此连接器的默认同步行为。使用同步规则采集管道来自定义特定索引的同步。

将提取配置的 MongoDB 数据库和集合中的所有文档,并将其转换为 Elasticsearch 索引中的文档。

  • 连接器为配置的数据库和集合中的每个 MongoDB 文档创建一个Elasticsearch 文档
  • 对于每个文档,连接器将每个 MongoDB 字段转换为一个 Elasticsearch 字段
  • 对于每个字段,Elasticsearch 动态确定数据类型

这会生成与原始 MongoDB 文档非常匹配的 Elasticsearch 文档。

当创建第一个文档时,会创建 Elasticsearch 映射。

每次同步都是“完全”同步。对于发现的每个 MongoDB 文档

  • 如果它不存在,则会在 Elasticsearch 中创建该文档。
  • 如果它已存在于 Elasticsearch 中,则会替换 Elasticsearch 文档并递增版本。
  • 如果 Elasticsearch 中已存在的文档不再存在于 MongoDB 集合中,则会从 Elasticsearch 中删除该文档。
  • 嵌入式文档存储为父文档中的 object 字段。

这是递归的,因为嵌入式文档本身可以包含嵌入式文档。

  • 不会提取大于 10 MB 的文件
  • 不会同步权限。索引到 Elastic 部署的所有文档将对所有有权访问该 Elastic 部署的用户可见。
同步规则
编辑

以下各节描述了此连接器的同步规则

基本同步规则对于所有连接器都是相同的,并且默认可用。

MongoDB 的高级规则可用于表示 find 查询或聚合管道。它们还可用于调整发出这些查询/管道时可用的选项。

find 查询
编辑

您必须在 MongoDB 集合上创建一个文本索引才能执行文本搜索。

对于 find 查询,此 JSON DSL 的结构应如下所示

{
	"find":{
		"filter": {
			// find query goes here
		},
		"options":{
			// query options go here
		}
	}
}

例如

{
	"find": {
		"filter": {
			"$text": {
				"$search": "garden",
				"$caseSensitive": false
			}
		},
		"skip": 10,
		"limit": 1000
	}
}

find 查询还支持其他选项,例如 projection 对象

{
  "find": {
    "filter": {
      "languages": [
        "English"
      ],
      "runtime": {
        "$gt":90
      }
    },
    "projection":{
      "tomatoes": 1
    }
  }
}

可用选项包括

  • allow_disk_use (true, false) - 设置为 true 时,服务器可以在执行 find 操作时将临时数据写入磁盘。此选项仅在 MongoDB 服务器 4.4 及更高版本上可用。
  • allow_partial_results (true, false) - 允许在某些分片宕机时查询获取部分结果。
  • batch_size (整数) - 从 MongoDB 返回的每批结果中的文档数量。
  • filter (对象) - 查询的筛选条件。
  • limit (整数) - 查询返回的最大文档数。
  • max_time_ms (整数) - 允许查询运行的最长时间(以毫秒为单位)。
  • no_cursor_timeout (true, false) - 服务器通常会在不活动一段时间(10 分钟)后使空闲游标超时,以防止过度使用内存。设置此选项可防止这种情况。
  • projection (数组,对象) - 结果集中每个文档中包含或排除的字段。如果是一个数组,则它应该至少有一个项目。
  • return_key (true, false) - 返回索引键而不是文档。
  • show_record_id (true, false) - 返回结果集中每个文档的 $recordId
  • skip (整数) - 返回结果之前要跳过的文档数。
聚合管道
编辑

类似地,对于聚合管道,JSON DSL 的结构应如下所示

{
	"aggregate":{
		"pipeline": [
			// pipeline elements go here
		],
		"options": {
            // pipeline options go here
		}
    }
}

可用选项包括

  • allowDiskUse (true, false) - 如果在聚合期间允许使用磁盘,则设置为 true。
  • batchSize (整数) - 每批返回的文档数。
  • bypassDocumentValidation (true, false) - 是否跳过文档级验证。
  • collation (对象) - 要使用的排序规则。
  • comment (字符串) - 要附加到此命令的用户提供的注释。
  • hint (字符串) - 用于聚合的索引。
  • let (对象) - 用于管道中的变量映射。有关详细信息,请参阅服务器文档。
  • maxTimeMs (整数) - 允许聚合运行的最长时间(以毫秒为单位)。
从 Ruby 连接器框架迁移
编辑

作为 8.8.0 版本的一部分,MongoDB 连接器已从 Ruby 连接器框架 迁移到 Elastic 连接器框架

此更改对从 MongoDB 摄取的数据引入了微小的格式修改

  1. 嵌套对象 id 字段名称已从 "_id" 更改为 "id"。例如,如果您有一个字段 "customer._id",则现在将命名为 "customer.id"。
  2. 日期格式已从 YYYY-MM-DD'T'HH:mm:ss.fff'Z' 更改为 YYYY-MM-DD'T'HH:mm:ss

如果您的 MongoDB 连接器在从 8.7.x 迁移到 8.8.x 后停止工作,请阅读 已知问题 中概述的解决方法。如果该方法不起作用,我们建议删除附加到此连接器的搜索索引,然后从头开始重新创建 MongoDB 连接器。

自管理连接器

编辑
查看 自管理连接器 参考
可用性和先决条件
编辑

此连接器还可作为 Elastic 连接器框架 中的 自管理连接器 提供。要将此连接器用作自管理连接器,请满足所有 自管理连接器要求

兼容性
编辑

此连接器与 MongoDB AtlasMongoDB 3.6 及更高版本兼容。

数据源和您的 Elastic 部署必须能够通过网络相互通信。

配置
编辑

使用 自管理连接器 工作流程时,这些字段最初将使用 连接器源代码 中设置的默认配置。这些设置在 get_default_configuration 函数定义中。

这些可配置字段将在 Kibana UI 中呈现其各自的 标签。连接后,您将能够在 Kibana 中更新这些值。

以下配置字段是设置连接器所必需的

主机

MongoDB 主机的 URI。示例

用户

连接器将使用的 MongoDB 用户名。

用户必须有权访问配置的数据库和集合。您可能希望为每个连接器创建一个专用的只读用户。

密码
连接器将使用的 MongoDB 密码。

匿名身份验证仅支持用于*测试目的*,但不应在生产环境中使用。省略用户名和密码以使用默认值。

数据库
要同步的 MongoDB 数据库。必须可以使用配置的用户名和密码访问该数据库。
集合
要同步的 MongoDB 集合。该集合必须存在于配置的数据库中。必须可以使用配置的用户名和密码访问该集合。
direct_connection
是否为 MongoDB 客户端使用直接连接选项。默认值为 False
ssl_enabled

是否使用 SSL/TLS 加密建立与 MongoDB 服务器的安全连接。确保您的 MongoDB 部署支持 SSL/TLS 连接。如果 您的 MongoDB 集群使用 DNS SRV 记录(即 MongoDB Atlas 用户),请启用此选项。

默认值为 False

ssl_ca
指定证书颁发机构的根证书。证书的值用于验证 MongoDB 实例提供的证书。

Atlas 用户可以将其留空,因为Atlas 使用广泛信任的根 CA

tls_insecure
跳过各种证书验证(如果启用了 SSL)。默认值为 False

我们强烈建议在生产环境中禁用此选项。

创建 MongoDB 连接器
编辑

使用 UI

编辑

要创建新的 MongoDB 连接器

  1. 在 Kibana UI 中,从主菜单导航到 搜索 → 内容 → 连接器 页面,或使用全局搜索字段
  2. 按照说明创建一个新的 MongoDB 自管理连接器。

使用 API

编辑

您可以使用 Elasticsearch 创建连接器 API 来创建新的自管理 MongoDB 自管理连接器。

例如

resp = client.connector.put(
    connector_id="my-{service-name-stub}-connector",
    index_name="my-elasticsearch-index",
    name="Content synced from {service-name}",
    service_type="{service-name-stub}",
)
print(resp)
const response = await client.connector.put({
  connector_id: "my-{service-name-stub}-connector",
  index_name: "my-elasticsearch-index",
  name: "Content synced from {service-name}",
  service_type: "{service-name-stub}",
});
console.log(response);
PUT _connector/my-mongodb-connector
{
  "index_name": "my-elasticsearch-index",
  "name": "Content synced from MongoDB",
  "service_type": "mongodb"
}
您还需要为连接器创建一个 API 密钥以供使用。

用户需要集群权限 manage_api_keymanage_connectorwrite_connector_secrets 才能以编程方式生成 API 密钥。

要为连接器创建 API 密钥

  1. 运行以下命令,替换指示的值。请注意响应中的 encoded 返回值

    resp = client.security.create_api_key(
        name="connector_name-connector-api-key",
        role_descriptors={
            "connector_name-connector-role": {
                "cluster": [
                    "monitor",
                    "manage_connector"
                ],
                "indices": [
                    {
                        "names": [
                            "index_name",
                            ".search-acl-filter-index_name",
                            ".elastic-connectors*"
                        ],
                        "privileges": [
                            "all"
                        ],
                        "allow_restricted_indices": False
                    }
                ]
            }
        },
    )
    print(resp)
    const response = await client.security.createApiKey({
      name: "connector_name-connector-api-key",
      role_descriptors: {
        "connector_name-connector-role": {
          cluster: ["monitor", "manage_connector"],
          indices: [
            {
              names: [
                "index_name",
                ".search-acl-filter-index_name",
                ".elastic-connectors*",
              ],
              privileges: ["all"],
              allow_restricted_indices: false,
            },
          ],
        },
      },
    });
    console.log(response);
    POST /_security/api_key
    {
      "name": "connector_name-connector-api-key",
      "role_descriptors": {
        "connector_name-connector-role": {
          "cluster": [
            "monitor",
            "manage_connector"
          ],
          "indices": [
            {
              "names": [
                "index_name",
                ".search-acl-filter-index_name",
                ".elastic-connectors*"
              ],
              "privileges": [
                "all"
              ],
              "allow_restricted_indices": false
            }
          ]
        }
      }
    }
  2. 使用 API 密钥 encoded 值更新您的 config.yml 文件。

有关所有可用的连接器 API 的详细信息,请参阅 Elasticsearch API 文档

使用
编辑

要将此连接器用作 自管理连接器,请参阅 自管理连接器。有关其他使用操作,请参阅 Kibana 中的连接器 UI

示例
编辑

此连接器有一个示例。请参阅托管连接器教程 (MongoDB)

已知问题
编辑
必须为 MongoDB Atlas 启用 SSL
编辑
  • 8.12.0 中引入的错误导致连接器无法同步 Mongo Atlas url(mongo+srv),除非启用了 SSL/TLS。
聚合管道中的表达式和变量
编辑

无法在聚合管道内使用像 new Date() 这样的表达式。这些表达式不会由底层 MongoDB 客户端评估,而是作为字符串传递到 MongoDB 实例。一种可能的解决方法是使用聚合变量

不正确(new Date() 将被解释为字符串)

{
    "aggregate": {
        "pipeline": [
            {
                "$match": {
                  "expiresAt": {
                    "$gte": "new Date()"
                  }
                }
            }
        ]
    }
}

正确(使用 $$NOW

{
  "aggregate": {
    "pipeline": [
      {
        "$addFields": {
          "current_date": {
            "$toDate": "$$NOW"
          }
        }
      },
      {
        "$match": {
          "$expr": {
            "$gte": [
              "$expiresAt",
              "$current_date"
            ]
          }
        }
      }
    ]
  }
}
使用自签名或自定义 CA TLS 证书连接
编辑

目前,MongoDB 连接器在连接到自托管的 MongoDB 主机时不支持使用自签名或自定义 CA 证书。

以下解决方法不应在生产中使用。

这可以在开发环境中通过将某些查询参数附加到配置的主机来解决。

例如,如果您的主机是 mongodb+srv://my.mongo.host.com,则附加 ?tls=true&tlsAllowInvalidCertificates=true 将允许禁用 TLS 证书验证。

此示例中的完整主机将如下所示

mongodb+srv://my.mongo.host.com/?tls=true&tlsAllowInvalidCertificates=true

Docker 镜像在 8.12.0 和 8.12.1 版本中出错
编辑

8.12.0 中引入的错误会导致连接器 Docker 镜像在使用 MongoDB 作为其源运行时出错。命令行将输出错误 cannot import name 'coroutine' from 'asyncio'此问题已在版本 8.12.28.13.0 中修复。 此错误不会影响 Elastic 管理的连接器。

有关影响所有连接器的任何问题,请参阅已知问题

故障排除
编辑

请参阅故障排除

安全性
编辑

请参阅安全性

使用 Docker 部署
编辑

您可以使用 Docker 将 MongoDB 连接器部署为自管理连接器。请按照以下说明进行操作。

步骤 1:下载示例配置文件

下载示例配置文件。您可以手动下载它,也可以运行以下命令

curl https://raw.githubusercontent.com/elastic/connectors/main/config.yml.example --output ~/connectors-config/config.yml

如果您的目录名称不同,或者您想使用其他配置文件名,请记住更新 --output 参数值。

步骤 2:更新自管理连接器的配置文件

使用以下设置更新配置文件以匹配您的环境

  • elasticsearch.host
  • elasticsearch.api_key
  • 连接器

如果您针对 Dockerized 版本的 Elasticsearch 和 Kibana 运行连接器服务,则您的配置文件将如下所示

# When connecting to your cloud deployment you should edit the host value
elasticsearch.host: http://host.docker.internal:9200
elasticsearch.api_key: <ELASTICSEARCH_API_KEY>

connectors:
  -
    connector_id: <CONNECTOR_ID_FROM_KIBANA>
    service_type: mongodb
    api_key: <CONNECTOR_API_KEY_FROM_KIBANA> # Optional. If not provided, the connector will use the elasticsearch.api_key instead

使用 elasticsearch.api_key 是推荐的身份验证方法。但是,您也可以使用 elasticsearch.usernameelasticsearch.password 来使用您的 Elasticsearch 实例进行身份验证。

注意:您可以通过简单地取消注释配置文件中的特定设置并修改其值来更改其他默认配置。

步骤 3:运行 Docker 镜像

使用以下命令运行带有连接器服务的 Docker 镜像

docker run \
-v ~/connectors-config:/config \
--network "elastic" \
--tty \
--rm \
docker.elastic.co/enterprise-search/elastic-connectors:8.17.0.0 \
/app/bin/elastic-ingest \
-c /config/config.yml

有关更多详细信息,请参阅 elastic/connectors 存储库中的 DOCKER.md

官方注册表 中查找所有可用的 Docker 镜像。

我们还提供了一个使用 Docker Compose 的快速入门自管理选项,因此您可以一次启动所有必需的服务:Elasticsearch、Kibana 和连接器服务。有关更多信息,请参阅 elastic/connectors 存储库中的 README

文档和同步
编辑

以下描述了此连接器的默认同步行为。使用同步规则采集管道来自定义特定索引的同步。

将提取配置的 MongoDB 数据库和集合中的所有文档,并将其转换为 Elasticsearch 索引中的文档。

  • 连接器为配置的数据库和集合中的每个 MongoDB 文档创建一个Elasticsearch 文档
  • 对于每个文档,连接器将每个 MongoDB 字段转换为一个 Elasticsearch 字段
  • 对于每个字段,Elasticsearch 动态确定数据类型

这会生成与原始 MongoDB 文档非常匹配的 Elasticsearch 文档。

当创建第一个文档时,会创建 Elasticsearch 映射。

每次同步都是“完全”同步。对于发现的每个 MongoDB 文档

  • 如果它不存在,则会在 Elasticsearch 中创建该文档。
  • 如果它已存在于 Elasticsearch 中,则会替换 Elasticsearch 文档并递增版本。
  • 如果 Elasticsearch 中已存在的文档不再存在于 MongoDB 集合中,则会从 Elasticsearch 中删除该文档。
  • 嵌入式文档存储为父文档中的 object 字段。

这是递归的,因为嵌入式文档本身可以包含嵌入式文档。

  • 不会提取大于 10 MB 的文件
  • 不会同步权限。索引到 Elastic 部署的所有文档将对所有有权访问该 Elastic 部署的用户可见。
同步规则
编辑

以下各节描述了此连接器的同步规则

基本同步规则对于所有连接器都是相同的,并且默认可用。

MongoDB 的高级规则可用于表示 find 查询或聚合管道。它们还可用于调整发出这些查询/管道时可用的选项。

find 查询
编辑

您必须在 MongoDB 集合上创建一个文本索引才能执行文本搜索。

对于 find 查询,此 JSON DSL 的结构应如下所示

{
	"find":{
		"filter": {
			// find query goes here
		},
		"options":{
			// query options go here
		}
	}
}

例如

{
	"find": {
		"filter": {
			"$text": {
				"$search": "garden",
				"$caseSensitive": false
			}
		},
		"skip": 10,
		"limit": 1000
	}
}

find 查询还支持其他选项,例如 projection 对象

{
  "find": {
    "filter": {
      "languages": [
        "English"
      ],
      "runtime": {
        "$gt":90
      }
    },
    "projection":{
      "tomatoes": 1
    }
  }
}

可用选项包括

  • allow_disk_use (true, false) - 设置为 true 时,服务器可以在执行 find 操作时将临时数据写入磁盘。此选项仅在 MongoDB 服务器 4.4 及更高版本上可用。
  • allow_partial_results (true, false) - 允许在某些分片宕机时查询获取部分结果。
  • batch_size (整数) - 从 MongoDB 返回的每批结果中的文档数量。
  • filter (对象) - 查询的筛选条件。
  • limit (整数) - 查询返回的最大文档数。
  • max_time_ms (整数) - 允许查询运行的最长时间(以毫秒为单位)。
  • no_cursor_timeout (true, false) - 服务器通常会在不活动一段时间(10 分钟)后使空闲游标超时,以防止过度使用内存。设置此选项可防止这种情况。
  • projection (数组,对象) - 结果集中每个文档中包含或排除的字段。如果是一个数组,则它应该至少有一个项目。
  • return_key (true, false) - 返回索引键而不是文档。
  • show_record_id (true, false) - 返回结果集中每个文档的 $recordId
  • skip (整数) - 返回结果之前要跳过的文档数。
聚合管道
编辑

类似地,对于聚合管道,JSON DSL 的结构应如下所示

{
	"aggregate":{
		"pipeline": [
			// pipeline elements go here
		],
		"options": {
            // pipeline options go here
		}
    }
}

可用选项包括

  • allowDiskUse (true, false) - 如果在聚合期间允许使用磁盘,则设置为 true。
  • batchSize (整数) - 每批返回的文档数。
  • bypassDocumentValidation (true, false) - 是否跳过文档级验证。
  • collation (对象) - 要使用的排序规则。
  • comment (字符串) - 要附加到此命令的用户提供的注释。
  • hint (字符串) - 用于聚合的索引。
  • let (对象) - 用于管道中的变量映射。有关详细信息,请参阅服务器文档。
  • maxTimeMs (整数) - 允许聚合运行的最长时间(以毫秒为单位)。
从 Ruby 连接器框架迁移
编辑

作为 8.8.0 版本的一部分,MongoDB 连接器已从 Ruby 连接器框架 迁移到 Elastic 连接器框架

此更改对从 MongoDB 摄取的数据引入了微小的格式修改

  1. 嵌套对象 id 字段名称已从 "_id" 更改为 "id"。例如,如果您有一个字段 "customer._id",则现在将命名为 "customer.id"。
  2. 日期格式已从 YYYY-MM-DD'T'HH:mm:ss.fff'Z' 更改为 YYYY-MM-DD'T'HH:mm:ss

如果您的 MongoDB 连接器在从 8.7.x 迁移到 8.8.x 后停止工作,请阅读 已知问题 中概述的解决方法。如果该方法不起作用,我们建议删除附加到此连接器的搜索索引,然后从头开始重新创建 MongoDB 连接器。