Neo4J cypher或C#api阵列道具交叉点

时间:2015-09-28 14:34:21

标签: neo4j cypher

我有关系,关系是属性类型的关系。我希望在第一个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”)

如果更容易说出跟随链接的任何路径,最后一个节点是第一个公司(初始匹配中的那个)。

我希望这会有所帮助

1 个答案:

答案 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中的元素相同。