跳转到主要内容
MongoDB 引擎是只读表引擎,可用于从远程 MongoDB 集合中读取数据。 仅支持 MongoDB v3.6+ 服务器。 尚不支持 Seed list(mongodb+srv)

创建表

引擎参数
如果你使用的是 MongoDB Atlas 云服务,可从 ‘Atlas SQL’ 选项获取连接 URL。 目前尚不支持 Seed list (mongodb**+srv**) ,但将在未来的发行版中加入。
或者,你也可以传入一个 URI:
引擎参数

类型映射

如果在 MongoDB 文档中找不到该键 (例如列名不匹配) ,则会插入默认值或 NULL (如果该列为 Nullable) 。

OID

如果你希望在 WHERE 子句中将 Stringoid 处理,只需将该列的名称放在表引擎的最后一个参数中。 当按 _id 列查询记录时,可能需要这样做,因为在 MongoDB 中,该列默认是 oid 类型。 如果表中的 _id 字段是其他类型,例如 uuid,则需要将 oid_columns 指定为空;否则会使用该参数的默认值 _id
默认情况下,只有 _id 会被视为 oid 列。
在这种情况下,输出将为 0,因为 ClickHouse 还不知道 another_oid_column 的类型是 oid,所以我们来修正一下:

支持的子句

仅支持包含简单表达式的查询 (例如,WHERE field = <constant> ORDER BY field2 LIMIT <constant>) 。 这类表达式会被转换为 MongoDB 查询语言,并在服务器端执行。 你可以使用 mongodb_throw_on_unsupported_query 关闭这些限制。 在这种情况下,ClickHouse 会尽力转换查询,但这可能导致全表扫描,并在 ClickHouse 端处理。
最好始终显式指定字面量的类型,因为 Mongo 对过滤器的类型要求非常严格。 例如,如果你想按 Date 过滤:
这将不起作用,因为 Mongo 不会将字符串转换为 Date,因此你需要手动进行类型转换:
这适用于 DateDate32DateTimeBoolUUID

使用示例

假设 MongoDB 中已加载 sample_mflix 示例数据集 在 ClickHouse 中创建一个表,以从 MongoDB 集合读取数据:
Query
Query
Response
Query
Response
Query
Response

故障排查

你可以在 DEBUG 级别的日志中查看生成的 MongoDB 查询。 具体实现细节可参见 mongocxxmongoc 的文档。
最后修改于 2026年7月1日