我有关系,关系是属性类型的关系。我希望在第一个rel上获得基于数组的所有关系,然后从那时起,只找到连接至少有一个公共元素的节点。即:
[a,b,c,d] - >(节点) - [a,f,g] - >会链接
但是
[A,B,C,d] - GT;(节点) - [R,F,G] - GT;不会链接
match (c:Company {RegistrationNumber : 'regNumber'}), c<-[r]-(n)
with n, c,r, extract(x in r.AlertIds | x) as alerts
match path= n-[*..7]-p
with c, n, path,extract(alertP in rels(path) | alertP.AlertId) as ap, extract(a in alerts | a) as alert
return distinct n,alert,c,rels(path), ap, nodes(path)
上面的cypher看起来有点疯狂,但基本上我正在尝试获取数组警报中的任何元素(从顶部)在第二部分的rel中的数组中找到的任何关系。
非常感谢任何帮助
更新1
http://console.neo4j.org/?id=ee23d3
上面的链接有望用于更好地理解我正在寻找的东西。
我希望能够在任何有常见AlertIds的路径之后找到所有链接。
所以在链接的例子中,我想只看到1个路径返回节点(3,2,1,0)和在路径中找到的AlertIds即(“e1”)
如果更容易说出跟随链接的任何路径,最后一个节点是第一个公司(初始匹配中的那个)。
我希望这会有所帮助
答案 0 :(得分:1)
Here is a console显示可能指向正确方向的查询。它基于与控制台相同的数据。
以下是它使用的查询:
MATCH path=(company:Company {RegNumber : "3254"})-[emp:IsEmployee]->(employee:Person)-[rel*..7]->(company)
WHERE ALL (r IN rel
WHERE ANY (a IN r.AlertIds
WHERE a IN emp.AlertIds))
RETURN company, emp.AlertIds AS alerts, employee, path
此查询查找长度为8的所有路径,这些路径以相同的Company
(3254)开头和结尾,其中第一个关系(emp
)的类型为IsEmployee
,其中所有后续关系至少有一个AlertIds
元素与emp.AlertIds
中的元素相同。