Ște*_*alu 5 graph neo4j cypher data-structures
假设我们有n个带有label的节点:Test和一个名为type的唯一属性.
UNWIND[{ type:"a" }, { type:"b" }, { type:"c" }, { type:"d" }] AS x
MERGE (t:Test { type: x.type })
RETURN t
Run Code Online (Sandbox Code Playgroud)
看起来像这样

现在让我们介绍一个标签节点:Collection.此节点的目的是与:Test节点具有唯一的关系模式.
MATCH (a:Test { type:"a" }),(b:Test { type:"b" })
CREATE UNIQUE (x:Collection)-[:HAS]->(a),(x:Collection)-[:HAS]->(b)
Return *
Run Code Online (Sandbox Code Playgroud)

当我尝试创建另一个独特的结构(如前一个结构)但是有一些共同的节点时,我面临的问题就开始了.
MATCH (a:Test { type:"a" })
CREATE UNIQUE (x:Collection)-[:HAS]->(a)
RETURN *
Run Code Online (Sandbox Code Playgroud)
预期的结果是标签的另一个节点:Collection被创建并链接到:Test {type:"a"}但实际结果是它匹配先前的数据结构并返回而不是创建新的数据结构.

预期结果应该有2 :Collection节点,一个链接到type:"a",另一个链接到type:"a"并输入:"b".

任何输入类型的输入将非常感激:D
\n\n\nCREATE UNIQUE 位于 MATCH 和 CREATE\xe2\x80\x89\xe2\x80\x94\xe2\x80\x89 的中间,它会匹配它能匹配的内容,并创建缺少的内容。CREATE UNIQUE 总是会对图进行尽可能少的更改,如果它可以使用现有图的一部分,那么它就会这样做。
\n
您添加Collection没有任何属性的节点。我想如果CREATE UNIQUE找到一个Collection节点,它就会使用它。这就是CREATE UNIQUE应该如何工作。
因此,如果您想要一个Collection与某些链接相关的新内容Test节点的新节点,您可以向该节点添加一些独特的属性:
MATCH (a:Test { type:"a" })\nCREATE UNIQUE (x:Collection {key: \'unique value\'})-[:HAS]->(a)\nRETURN *\nRun Code Online (Sandbox Code Playgroud)\n\n或者在单独的步骤中创建它:
\n\nMATCH (a:Test { type:"a" })\nCREATE (x:Collection)\nCREATE (x)-[:HAS]->(a)\nRETURN *\nRun Code Online (Sandbox Code Playgroud)\n\n或者使用MERGE代替CREATE UNIQUE.