对于数据(如下),我的查询如下:
MATCH p = (ob:Obiect)<--(w:Word { value:'game' })-[*]-(x) RETURN {id: id(x), value: x.value}
CREATE (w0:Obiect { value : 'Obiect' })
CREATE (w1:Word { value:'game' })
CREATE (w2:Word { value:'unreal' })
CREATE (w3:Word { value:'a' })
CREATE (w4:Word { value:'b'})
CREATE (w5:Word { value:'c' })
CREATE (w6:Word { value:'d'})
CREATE (w1)-[:IS]->(w0)
CREATE (w2)-[:IS]->(w1)
CREATE (w3)-[:HAS]->(w2)
CREATE (w4)-[:HAS]->(w3)
CREATE (w5)-[:HAS]->(w4)
CREATE (w6)-[:HAS]->(w5)
CREATE (w6)-[:HAS]->(w3)
如果关系(值:d) - &gt;(值:a)不存在那么它没关系,我的结果如下:
id 4070 value unreal
id 4071 value a
id 4072 value b
id 4073 value c
id 4074 value d
但如果关系存在,那么我有重复的节点(下面)。问题是如何避免这个问题?
id 4063 value unreal
id 4064 value a
id 4065 value b
id 4066 value c
id 4067 value d
id 4064 value a
id 4067 value d
id 4066 value c
id 4065 value b
id 4064 value a
答案 0 :(得分:0)
您可以使用MERGE子句:http://docs.neo4j.org/chunked/stable/query-merge.html
MERGE (w3:Word { value:'a' })
MERGE (w4:Word { value:'b'})
MERGE(w3)-[:HAS]->(w4)
MERGE充当“匹配或创建”。
请注意MERGE会尝试匹配整个模式,这可能会让您第一次感到困惑,所以我建议您使用Graphaware这篇有用的文章:http://graphaware.com/neo4j/2014/07/31/cypher-merge-explained.html