我正在探索GraphDB查询语言,并在OriendDB here中询问有关传递闭包支持的问题?我想看看Neo4J如何支持这个功能:
简而言之,假设我的节点都标记为PERSON。我有一个叫做“父亲”的边缘将这些人联系在一起。对于给定节点说p1,我想知道Neo4j中的以下查询是怎么样的:
找到p1的所有祖先?
我不熟悉Neo4j语法(但我认为可以定义上面我解释的这种结构),所以请原谅我跳过模式定义。
答案 0 :(得分:0)
你可以更进一步,为祖先创建一个排序:
MATCH(n:Person {RN:1}) 匹配p = n - [:父亲|母亲* .. 99] - > x 返回x.RN为RN,x.fullname为Name,length(p)为generation,reduce(srt2 ='',q IN节点(p)| srt2 + replace(replace(q.sex, ' M',' A'),' F'' B'))AS sortOrder 按sortOrder排序
这是为家谱应用程序开发的,所以它有母亲和父亲。在这种情况下,父亲在(A)母亲(B)之前排序。如果您只是寻找行的末尾(union_id = 1表示没有父母):
MATCH(n:Person {RN:1}) 匹配p = n - [:父亲|母亲* .. 99] - > x 其中x.union_id = 1 返回x.RN为RN,x.fullname为Name,length(p)为generation,reduce(srt2 ='',q IN节点(p)| srt2 + replace(replace(q.sex, ' M'' A'),' F'' B'))AS sortOrder,x.union_id