如何在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'筛选
语句拆解
- ARRAY构造器:
ARRAY { ... } FOR s IN ... END是关键!它会遍历原schedule数组的每个元素s,只提取你需要的flight和utc,生成新的数组。 - 对象重构:外层的
{ "travel-sample": {...} }是按照你想要的结构重新组装数据,把原文档里需要保留的字段都映射进来。 - 过滤条件:
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
相关产品推荐
相关产品推荐

