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

如何编写单条Cypher语句实现文件夹节点的优先级包含查询

解决方案

可以通过结合OPTIONAL MATCH和CASE语句实现需求,以下是具体的Cypher语句:

MATCH (f:FOLDER)
OPTIONAL MATCH (f)-[:CONTAINS]->(a:TYPE_A)
OPTIONAL MATCH (f)-[:CONTAINS]->(b:TYPE_B)
RETURN
  CASE
    WHEN count(a) > 0 THEN collect(id(a))
    WHEN count(b) > 0 THEN collect(id(b))
    ELSE []
  END AS folder_contained_ids

语句说明:

  • MATCH (f:FOLDER):匹配目标文件夹节点,若需针对特定文件夹,可添加WHERE条件(例如WHERE id(f) = 你的文件夹ID)
  • OPTIONAL MATCH:分别尝试匹配文件夹关联的TYPE_A和TYPE_B节点,无匹配时对应变量为null
  • CASE逻辑:
    • 优先检查是否存在TYPE_A节点,若存在则收集所有TYPE_A节点的ID组成数组返回
    • 若没有TYPE_A节点,再检查TYPE_B节点,存在则收集其ID数组返回
    • 两种节点都不存在时,返回空数组[]

如果你的场景中每个文件夹只会关联单个目标节点,也可以简化为:

MATCH (f:FOLDER)
OPTIONAL MATCH (f)-[:CONTAINS]->(a:TYPE_A)
OPTIONAL MATCH (f)-[:CONTAINS]->(b:TYPE_B)
RETURN
  COALESCE(id(a), id(b), []) AS folder_contained_id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:57:06