设置节点度

时间:2015-05-25 08:21:37

标签: neo4j oncreate

我有一个图表,其中我将节点的程度保持为节点中名为“degree”的属性。

我需要的是当我在两个节点之间创建边缘时,我需要增加两个节点的度数。

为了创建独特的边缘,我对边缘使用“CREATE UNIQUE”。因此,如果我需要增加相应节点的属性“degree”,我需要使用“ON CREATE”和“ON MATCH”,因为它是“MERGE”。

但我不能使用CREATE和ON MATCH与CREATE UNIQUE。那么使用ON CREATE和ON MATCH使用CREATE UNIQUE的正确方法是什么?

这就是我的尝试方式:

MATCH (n1:PER {Node_Id:"X"}), (n2:PER {Node_Id:"Y"}) WHERE n1.Node_Id<>n2.Node_Id CREATE UNIQUE (n1)-[r:PER_PER {Doc_Id:"st_new", Event_Class:"EC_1", Event_Instance:"EI_1"}]-(n2) ON CREATE SET n1.degree = n1.degree + 1, n2.degree = n2.degree + 1

2 个答案:

答案 0 :(得分:0)

不确定为什么要将学位存储为属性。 Neo4j在API级别上有getDegree()函数,请参阅http://neo4j.com/docs/stable/javadocs/org/neo4j/graphdb/Node.html#getDegree()。 Cypher还没有在任何地方使用它,但对于它已经存在的某些模式。

然而,要回答您的问题:只需使用MERGE代替CREATE UNIQUE来最终建立关系:

MATCH (n1:PER {Node_Id:"X"}), (n2:PER {Node_Id:"Y"}) 
WHERE n1.Node_Id<>n2.Node_Id 
MERGE (n1)-[r:PER_PER {Doc_Id:"st_new", Event_Class:"EC_1", Event_Instance:"EI_1"}]-(n2)    
ON CREATE SET n1.degree = n1.degree + 1, n2.degree = n2.degree + 1

答案 1 :(得分:0)

如果您确实有充分的理由将节点度数存储为属性,请查看我们的一个名为RelCount的模块,该模块已根据您的需要进行构建。我的thesis中详细介绍了它。

然而,正如Stefan指出的那样,首先使用getDegree()并且只有在速度不够快的情况下,或者您需要根据某些关系属性值获得学位时,请使用RelCount。