如何在neo4j中列出所有具有共同属性的节点

时间:2014-10-10 09:24:47

标签: neo4j cypher graph-databases

我有4个节点A,B,C,D具有以下属性,

 A:{works_in:"wipro"},{designation:"SE"}

 B:{works_in:"CTS"},{designation:"SSE"}

 C:{works_in:"CGI"},{designation:"SE"}

 D:{works_in:"UHG"},{designation:"SSE"}

现在我想要显示具有类似属性的所有节点:works_in / designation

3 个答案:

答案 0 :(得分:2)

您可以尝试以下内容:

MATCH (a:YourLabel)
WITH a
MATCH (b:YourLabel)
WHERE a <> b AND (b.works_in = a.work_in OR b.designation = a.designation)
RETURN a, COLLECT(b) AS similar

这将首先匹配您的所有节点,然后使用每个节点作为新查询的源。 a <> b将停止与自身匹配的节点。

答案 1 :(得分:1)

我尝试了以下查询,其工作正常

   MATCH (A),(B)
   WHERE A. works_in =B. works_in
   RETURN A. works_in as Node1_and_Node2_working_in;

但我面临的问题是每个节点都匹配自己。结果即将到来 喜欢,                            Node1_and_Node2_working_in

                          wipro (A-to-A)

                          cts   (B-to-B)

                          cgi   (C-to-C)

                          uhg   (D-to-D)

我们可以使用任何内置命令或属性来解决这个问题。如果是这样,请分享您对此的看法。

答案 2 :(得分:0)

Hej Pavan,我会这样做:

此查询将返回所有工作在CGI或CTS上的节点,并且具有SE或SSE等名称。

MATCH (n) WHERE n.works_in =~ 'C.*' AND n.designation =~ '(?i)S.*' return n

这将返回节点B和C. 使用=~运算符,您可以在查询中使用正则表达式

也许你也希望快速浏览一下Neo4J Docs

如果查询只返回与works_in完全匹配的节点,则使用

MATCH (n) WHERE n.works_in = 'WinPro'

MATCH (n) WHERE n.designation = 'SE'

另一个想法是创建具有名称和电子邮件等属性的节点,并创建像技能(CGI,Java,WinPro)或项目之类的节点,并将它们与诸如WORKS_IN之类的关系或LOCATED_IN ...

连接起来。

帕特里克