首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免neo4j循环查询中的循环

如何避免neo4j循环查询中的循环
EN

Stack Overflow用户
提问于 2019-12-17 18:15:39
回答 2查看 63关注 0票数 0

我有一个朋友-朋友数据模型,它根据一个朋友如何定义另一个朋友,在任意两个朋友节点之间有两个关系。例如,用户"A“可以将用户"B”定义为“朋友”,而"B“可以将"A”定义为“伙伴”。问题是,当我试图获得用户"A“的第三级关系时,它返回用户"B",而实际结果应该是"D”。

代码语言:javascript
运行
复制
MATCH(a:Users {first_name : "A"}) -[:BUDDY|FRIEND*3] -> (b)
RETURN a,b

代码语言:javascript
运行
复制
MATCH (a)-[]-(b)-[]-(c)-[]-(d)
WHERE a.first_name="A" 
RETURN a,d

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-18 04:17:55

或者,您可以执行以下操作:

代码语言:javascript
运行
复制
MATCH p=((a:Users {first_name : "A"})-[:BUDDY|FRIEND*3]->(b))
WITH DISTINCT a, b, nodes(p) as nodes
UNWIND nodes AS node
WITH a, b, nodes, COLLECT(DISTINCT node) as distinct_nodes
WITH a, b WHERE SIZE(nodes)=SIZE(distinct_nodes)
RETURN a, b

或者使用APOC调用会更简单一些:

代码语言:javascript
运行
复制
MATCH p=((a:Users {first_name : "A"})-[:BUDDY|FRIEND*3]->(b))
WITH DISTINCT a, b WHERE SIZE(nodes(p)) = SIZE(apoc.coll.toSet(nodes(p)))
RETURN a, b
票数 1
EN

Stack Overflow用户

发布于 2019-12-18 00:23:21

我建议APOC Path Expander过程使用一种只考虑到节点的单一路径的扩展方法,允许指定最大和最小深度,采用关系筛选器,并设置是否允许多次访问节点。具体地说,apoc.path.expandConfig()过程应该满足您的需要。

代码语言:javascript
运行
复制
MATCH (a:Users {first_name: "A"})
CALL apoc.path.expandConfig(a, {relationshipFilter:"BUDDY|FRIEND",minLevel:3,maxLevel:3, bfs:true,uniqueness:"NODE_GLOBAL"}) YIELD path
RETURN a, path

唯一性:“NODE_GLOBAL”参数确保没有节点被访问超过一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59371986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档