如何在SurrealDB中查询两个节点之间存在的关系?
在SurrealDB中判断两个节点是否存在关系
你可以通过两种方式实现类似Neo4j的节点关系存在性检查:
方法一:使用EXISTS子查询
利用EXISTS()函数结合双向关系查询,判断是否存在任意方向的连接:
SELECT EXISTS( -- 查询从node1到node2的向外关系 SELECT * FROM Node:node1_id -> * -> Node:node2_id UNION -- 查询从node2到node1的向外关系(即node1的向内关系) SELECT * FROM Node:node1_id <- * <- Node:node2_id ) AS is_related;
如果需要指定特定关系类型(比如CONNECTED),将*替换为关系名称即可:
SELECT EXISTS( SELECT * FROM Node:node1_id -> CONNECTED -> Node:node2_id UNION SELECT * FROM Node:node1_id <- CONNECTED <- Node:node2_id ) AS is_related;
方法二:通过计数判断
统计两个节点之间的关系数量,若大于0则说明存在关系:
SELECT count(*) > 0 AS is_related FROM ( SELECT * FROM Node:node1_id -> * -> Node:node2_id UNION SELECT * FROM Node:node1_id <- * <- Node:node2_id );
说明
- SurrealDB中用
->表示向外的关系(outgoing),<-表示向内的关系(incoming),UNION组合两者以实现Neo4j中无向关系-[r]-的效果。 Node是你的节点文档类型,需替换为实际的类型名称;node1_id和node2_id替换为目标节点的ID。
内容的提问来源于stack exchange,提问作者grooby
相关产品推荐
相关产品推荐

