我的数据模型有2个Person
节点,通过HAS_FORMS
关系连接到一个Form
节点。一个Form
节点有一个names
属性,其中包含一个名字列表(例如['solid', 'liquid','gas']
或['solid','liquid','gel']
),我想让names
中的每个值都成为一个节点,沿着到person节点的相关连接,另外我不想有任何重复。
我尝试在创建节点(具有副本)后添加约束,并且在使用unwind
时尝试使用With distinct
。我使用的代码:
我不能使用with distinct
,因为它给出了一个错误(F是明确定义的)。
3条答案
按热度按时间wribegjk1#
您可以将remove/detach form(f)命令放在查询的末尾。
2sbarzqh2#
在第二个代码块中,在
with
语句中没有沿着f
。我不清楚你的图表。您希望节点是
(:form)
还是希望name属性是标签,例如(:solid)
?如果你想要后者,你可以使用
apoc.create.addLabels
过程:https://neo4j.com/labs/apoc/4.4/graph-updates/graph-refactoring/property-value-label/另外,这里只是一个建议,但您可能会考虑使用Neo4j的标准命名约定。它使你的代码更容易理解。
标签:MyLabel(caps for each word)
属性:myProperty(第一个单词后的每个单词大写)
关系:MY_RELATIONSHIP(全部大写,空格用下划线)
hk8txs483#
您应该只尝试删除
f
一次(before youUNWIND
)。此外,WITH
子句消除了子句未指定的任何现有变量。此查询应该可以工作:
请注意,我将新的关系类型更改为
HAS_FORM
,以使名称更准确。但这也允许您重新运行查询,而不触及新的关系。