我有一个下面的Cypher查询,它返回属于特定Tag的所有Tag
MATCH (d:Decision)-[:BELONGS_TO]->(t:Tag) WHERE t.id = {tagId} RETURN d根据我的业务逻辑,每个Tag都可以有一组同义词:
(t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 而且每个s:Tag也可以有一个同义词以同样的方式关联。无限的深度和位置ts.approved = true。
请演示如何扩展第一个查询,以便不仅返回与开始标记(t.id = {tagId})相关的决策,而且返回与所有标记的同义词相关的所有决策(深度无限)。
理想情况下,所有这些决策都应该在一个d变量下返回。
现在,我正在处理以下查询:
MATCH p=(t:Tag)-[:FOR|HAS*]-(end:Tag)
WHERE t.id = {tagId} AND NOT (end)<-[:FOR]-()
OPTIONAL MATCH (d:Decision)-[:BELONGS_TO]->(tag)
RETURN d但不起作用。
更新
我创建了一个Neo4j沙箱:
http://54.165.53.29:33761/browser/
neo4j
timer-rocks-hilltop请使用以下查询:
MATCH p=(t:Tag)-[:FOR|HAS*0..]-(end:Tag)
WHERE t.id = 1 AND NOT (end)<-[:FOR]-()
MATCH (d:Decision)-[:BELONGS_TO]->(end)
RETURN d它只返回路径中的最后一个决定(Decision3),但也应该返回Decision1和决定2。
这是样本数据库用户名/密码:新4j/新4j1
我有一个与这个标记相关联的3 Tag和3 Decision。
也是
Tag 2是Tag 1的同义词,Tag 3是Tag 2的同义词。
我需要找到所有的Decision通过Tag 1和它的同义词(Tag 2和Tag 3)。这是决定:Decision1,Decision2,Decision 3
发布于 2017-07-08 20:27:49
对于可变的深度遍历,有一件微妙的事情,即零深度:
MATCH p=(t:Tag)-[:FOR|HAS*0..]-(end:Tag)
WHERE t.id = {tagId} AND NOT (end)<-[:FOR]-()
MATCH (d:Decision)-[:BELONGS_TO]->(end)
RETURN d其思想是,它既处理t节点具有FOR或关系的情况,也处理它们没有关系的情况。诀窍是找到的标记(即使t节点也是0)都在end别名下。
您可以在本文中找到关于可变长度关系的更深入的文档:https://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html
编辑
似乎查找标记节点的逻辑是错误的,由于查询AND NOT (end)<-[:FOR]-()中的这个部分,查询只返回一个标记。移除它,你会看到它返回3个决定
https://stackoverflow.com/questions/44988499
复制相似问题