我有一个图表,其中我将节点的程度保持为节点中名为“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
答案 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)