CREATE UNIQUE在Cypher中为neo4j做了什么?

时间:2017-04-17 15:21:18

标签: neo4j cypher

http://neo4j.com/docs/developer-manual/current/cypher/clauses/create-unique/

我是否认为它可用于在两个常量节点之间创建各种关系(即两个相同节点之间存在许多关系),其属性中的值不同?

是否可以有这样的命令?

Load CSV from ...
MATCH (sender:Wallet {primWallAddr:line[0]}), (receiver:Wallet {primWallAddr:line[1]}) 
CREATE UNIQUE (sender)-[:SendTo{tranHashString:line[2],...uniqueReference:(line[2])}]->(receiver)")

是否可以使用“MERGE”而不是“CREATE UNIQUE”来实现相同的结果? 如果没有,为什么?

1 个答案:

答案 0 :(得分:2)

可以使用static ArrayList<Integer> newSmallChange(ArrayList<Integer> list){ int i = 0; int j = 0; while (i == j){ i = CS2004.UI(1, list.size()); j = CS2004.UI(1, list.size()); } int temp = list.get(i); } 代替MERGE,甚至可能是首选。您需要做的是通过uniqueReference CREATE UNIQUE,如下所示:

MERGE

对于唯一引用,稍微更优化Load CSV from ... MATCH (sender:Wallet {primWallAddr:line[0]}), (receiver:Wallet {primWallAddr:line[1]}) MERGE (sender)-[:SendTo{tranHashString:line[2],...uniqueReference:(line[2])}]->(receiver) ,并使用MERGE设置其他属性

ON CREATE

如果您希望此发件人和收件人之间只有一个关系,只需更新其属性即可:

Load CSV from ...
MATCH (sender:Wallet {primWallAddr:line[0]}), (receiver:Wallet {primWallAddr:line[1]}) 
MERGE (sender)-[s:SendTo{uniqueReference: line[2]]->(receiver)
ON CREATE SET s.tranHashString = line[3]

回答问题1:

根据我的理解,你可以在你的案例中使用Load CSV from ... MATCH (sender:Wallet {primWallAddr:line[0]}), (receiver:Wallet {primWallAddr:line[1]}) MERGE (sender)-[s:SendTo]->(receiver) ON CREATE SET s.tranHashString = line[3] ON MATCH SET s.tranHashString = line[3] ,只要知道如果你想改变关系的任何属性,CREATE UNIQUE将创建一个新的关系,永远不会更新现有的,会毁了你的身份证系统。