CREATE MONGODB CONNECTION¶
CREATE MONGODB CONNECTION 以名称和连接选项注册 MongoDB 连接,使 MatrixOne 能够通过外部表查询外部 MongoDB 集合。
描述¶
CREATE MONGODB CONNECTION 在 MatrixOne 中注册一个 MongoDB 连接。注册连接后,可以创建 ENGINE = mongodb 的外部表来映射 MongoDB 集合,并使用标准 SQL 查询它。
连接使用 hosts 列出种子服务器,或使用 srv_host 进行 DNS SRV 服务发现。认证默认使用针对 admin 认证数据库的 SCRAM-SHA-256 机制,且默认要求启用 TLS。
必须且只能指定 hosts 和 srv_host 中的一个。credential_secret_ref 为必填项。v4.2.0 的 CN 使用内置环境变量 resolver,因此引用必须是账号作用域的 secret://env/... 名称;MatrixOne 不接受在 DDL 中直接填写密码。
要修改现有连接,请使用 ALTER MONGODB CONNECTION ... SET (...)、... ENABLE 或 ... DISABLE。要删除连接,请使用 DROP MONGODB CONNECTION。
前置条件¶
创建 MongoDB 连接前:
按下文配置必需的账号作用域环境变量凭据。
为 MongoDB 端点配置主机名或 CIDR allowlist。
必须且只能提供
hosts或srv_host中的一个。确保 MatrixOne 主机能够访问 MongoDB 端点。
v4.2.0 构造器默认启用 MongoDB 连接器,但在每个 CN 配置 allowlist 前,端点访问仍然 fail-closed。DNS 主机名需要配置 allowed-host-suffixes,直接使用 IP 地址需要配置 allowed-cidrs,使用回环地址则需要设置 allow-loopback = true。例如:
[cn.frontend.mongodb]
enable = true
allowed-host-suffixes = ["example.com"]
allowed-cidrs = ["192.0.2.0/24"]
v4.2.0 内置 EnvSecretResolver 只接受 secret://env/...。系统账号的环境变量名必须以 MO_MONGODB_ 开头;租户账号 N 必须使用 MO_MONGODB_ACCOUNT_N_ 前缀。变量值是严格 JSON,字段名必须为小写 username 和 password:
export MO_MONGODB_DOCS_CREDENTIAL='{"username":"docs_reader","password":"replace-me"}'
系统账号在 DDL 中使用 secret://env/MO_MONGODB_DOCS_CREDENTIAL。多 CN 部署必须在所有可能规划或执行外表扫描的 CN 进程中设置相同变量,通过部署的 secret 机制分发,并一致滚动重启。环境变量 resolver 适合本地或受控部署;生产 secret-manager 集成必须实施相同的账号命名空间隔离。不要把凭据写入 hosts、srv_host 或 options_json。
语法¶
CREATE MONGODB CONNECTION connection_name WITH ("option" = 'value' [, "option" = 'value'] ...)
参数¶
选项 |
说明 |
|---|---|
|
条件必填。逗号分隔的 |
|
条件必填。不含用户信息、路径和端口的 DNS SRV 主机,不能与 |
|
可选。副本集名称。 |
|
可选。认证数据库,默认为 |
|
可选。认证机制,默认为 |
|
必填。v4.2.0 中使用账号作用域环境引用,例如 |
|
可选。TLS 模式,默认为 |
|
可选。对已存储 CA 证书密钥的引用。 |
|
可选。读偏好,默认为 |
|
可选。读关注,默认为 |
|
可选。允许的最大复制延迟(秒)。 |
|
可选。包含附加连接选项的 JSON 文档。 |
示例¶
CREATE MONGODB CONNECTION docs_mongo WITH (
"hosts" = 'mongo1.example.com:27017,mongo2.example.com:27017',
"credential_secret_ref" = 'secret://env/MO_MONGODB_DOCS_CREDENTIAL',
"replica_set" = 'rs0',
"read_preference" = 'secondaryPreferred'
);
示例中的主机名是占位符。创建或使用连接前,必须在每个 CN 的 allowed-host-suffixes 中加入 example.com。