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

如何在Couchbase中通过SQL查询提取指定字段的嵌套结构数据

搞定Couchbase嵌套数组字段移除的SQL查询

嘿,作为Couchbase新手,处理这种嵌套数组的投影确实容易摸不着头脑!其实你不用纠结UNNEST或者NEST(那些是用来做数组关联查询的),咱们这个需求用ARRAY构造器就能轻松实现,纯SQL搞定。

核心思路

我们需要重新构造travel-sample对象:把原文档里需要保留的字段一一映射,而schedule数组则遍历原数组,只留下flight和utc字段,丢掉day就行。

最终SQL语句

SELECT {
  "travel-sample": {
    "airline": t.`travel-sample`.airline,
    "airlineid": t.`travel-sample`.airlineid,
    "destinationairport": t.`travel-sample`.destinationairport,
    "schedule": ARRAY { "flight": s.flight, "utc": s.utc } 
                FOR s IN t.`travel-sample`.schedule END,
    "sourceairport": t.`travel-sample`.sourceairport,
    "type": t.`travel-sample`.type
  }
}
FROM `travel-sample` t
WHERE t.`travel-sample`.id = 10000; -- 按需修改过滤条件,比如按type='route'筛选

语句拆解

  1. ARRAY构造器:ARRAY { ... } FOR s IN ... END 是关键!它会遍历原schedule数组的每个元素s,只提取你需要的flight和utc,生成新的数组。
  2. 对象重构:外层的{ "travel-sample": {...} }是按照你想要的结构重新组装数据,把原文档里需要保留的字段都映射进来。
  3. 过滤条件:WHERE子句可以根据你的实际需求调整,比如只查type='route'的文档,或者特定airline的记录。

执行结果

运行这条SQL后,就能得到你期望的输出:

[
  {
    "travel-sample": {
      "airline": "AF",
      "airlineid": "airline_137",
      "destinationairport": "MRS",
      "schedule": [
        { "flight": "AF818", "utc": "08:02:00" },
        { "flight": "AF967", "utc": "11:33:00" },
        { "flight": "AF730", "utc": "19:42:00" }
      ],
      "sourceairport": "TLV",
      "type": "route"
    }
  }
]

内容的提问来源于stack exchange,提问作者Pati Ram Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:50