You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ClickHouse MongoDB函数读取嵌套对象异常,求正确Schema配置

问题场景

使用ClickHouse的mongodb表函数读取MongoDB集合时,嵌套对象delivery_slot的字段返回空数组,无法正确获取对应值。

MongoDB文档结构

{
  _id: ObjectId('63aaa3c9972e2b2adee20408'),
  bag_id: 403747,
  delivery_slot: {
    slot: 'By 07:00 AM',
    upper_bound: '2023-01-04T07:50:27+00:00',
    lower_bound: '2023-01-02T07:50:27+00:00',
    date: '2023-01-04T07:50:27+00:00',
    type: 'order_window'
  },
  display_name: 'Bag'
}

原查询语句

SELECT 
    bag_id, 
    display_name,
    delivery_slot.date
FROM mongodb(
    '<IP>:<host>', 
    'db', 
    'collection',
    'username',
    'password',
    'bag_id UInt64, 
     display_name String, 
     delivery_slot Nested( slot String, lower_bound String, upper_bound String, date String, type String)', 
    'connectTimeoutMS=10000'
) 
LIMIT 100;

实际错误结果

bag_id|display_name|delivery_slot.date|
------+------------+------------------+
403747|Bag         |[]                |
403754|Bag         |[]                |
403755|Bag         |[]                |
403756|Bag         |[]                |
403757|Bag         |[]                |
403758|Bag         |[]                |
403759|Bag         |[]                |

预期结果

bag_id|display_name|delivery_slot.date|
------+------------+------------------+
403747|Bag         |2023-01-04T07:50:27+00:00              |
403754|Bag         |2023-01-04T07:50:27+00:00              |
403755|Bag         |2023-01-04T07:50:27+00:00                |
403756|Bag         |2023-01-04T07:50:27+00:00                |
403757|Bag         |2023-01-04T07:50:27+00:00                |
403758|Bag         |2023-01-04T07:50:27+00:00               |
403759|Bag         |2023-01-04T07:50:27+00:00               |

解决方案

问题根源是Schema中错误地将delivery_slot定义为Nested类型。ClickHouse的Nested类型对应MongoDB的数组形式嵌套结构,而你的MongoDB文档里delivery_slot是单个嵌套对象,因此需要改用Tuple类型或直接展开嵌套字段。

方式1:使用Tuple类型映射单个嵌套对象

SELECT 
    bag_id, 
    display_name,
    delivery_slot.date
FROM mongodb(
    '<IP>:<host>', 
    'db', 
    'collection',
    'username',
    'password',
    'bag_id UInt64, 
     display_name String, 
     delivery_slot Tuple(slot String, lower_bound String, upper_bound String, date String, type String)', 
    'connectTimeoutMS=10000'
) 
LIMIT 100;

方式2:直接展开嵌套字段(适合仅需部分字段的场景)

SELECT 
    bag_id, 
    display_name,
    delivery_slot_date
FROM mongodb(
    '<IP>:<host>', 
    'db', 
    'collection',
    'username',
    'password',
    'bag_id UInt64, 
     display_name String, 
     delivery_slot_date String alias `delivery_slot.date`', 
    'connectTimeoutMS=10000'
) 
LIMIT 100;

如果需要完整获取嵌套对象的所有字段,可展开全部:

SELECT 
    bag_id, 
    display_name,
    delivery_slot_slot,
    delivery_slot_lower_bound,
    delivery_slot_upper_bound,
    delivery_slot_date,
    delivery_slot_type
FROM mongodb(
    '<IP>:<host>', 
    'db', 
    'collection',
    'username',
    'password',
    'bag_id UInt64, 
     display_name String, 
     delivery_slot_slot String alias `delivery_slot.slot`,
     delivery_slot_lower_bound String alias `delivery_slot.lower_bound`,
     delivery_slot_upper_bound String alias `delivery_slot.upper_bound`,
     delivery_slot_date String alias `delivery_slot.date`,
     delivery_slot_type String alias `delivery_slot.type`', 
    'connectTimeoutMS=10000'
) 
LIMIT 100;

内容的提问来源于stack exchange,提问作者Hitendra Rathore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:51:15