【发布时间】:2020-07-09 04:35:33
【问题描述】:
我目前有一个在 Men 节点和 People 节点之间建立关系的查询:
MATCH (m:Mem)
UNWIND m.personID as person
MERGE (p:Person{personID:person})
MERGE (m)-[:WITH]->(p)
Mem 节点包含一个 PersonID 数组,我正在展开这些数组,然后将其与具有相应 PersonID 的 Person 节点匹配。但是,查询正在与它创建的 new 个人节点建立关系,只使用相应的 personIDs 属性(没有其他属性),而不是与 new em>现有具有相应 personID 的 Person 节点。
即使我对带有 Person 标签的节点的 personID 属性有唯一约束,也会发生这种情况。
如何编写一个查询来建立关系但不创建具有相应 personID 的新节点?
【问题讨论】:
-
由于您使用
MERGE(而不是CREATE)作为Person节点,如果没有具有相同@987654326 的节点,您只会创建一个新的Person节点@ 价值。您需要检查为什么预期的Person节点不存在。 -
好的 - 我想我已经解决了。当我展开 Mems 属性数组时,personID 是 strings 但在现有的 Person 节点上,personID 是 integers,所以当它进行合并时,它会创建具有相应 personID 的新节点作为 strings 而不是创建与 personID 为 integers 的现有节点的关系。所以我需要弄清楚如何在展开时将数组中的值设置为 integers 而不是将它们保留为 strings。