如何在 neo4j 中为双向关系属性添加值集合?
How to add collection of values for a bidirectional relationship properties in neo4j?
我正在 neo4j 中创建 2 个节点,其方向属性如下:
两个员工都在互相打电话,他们通过 CALLED 关系相互联系..
MATCH (e1:EMP),(e2:EMP) WHERE e1.NUMBER='200' AND e2.NUMBER='100' MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = ['233']
我的结果如下。
当我在反向创建关系时:
MATCH (e1:EMP),(e2:EMP) WHERE e1.NUMBER='100' AND e2.NUMBER='200' MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = "235" +r.DURATION[0..]
我的结果有些奇怪
如何在集合中添加两个属性,使其看起来像
双向的概念只有在查询的时候才有。在建立关系时,每个关系都必须有一个方向。你有两个 different 关系,每个方向一个。
从 emp 200 到 100 的关系有一个名为 duration 的 属性,值为 ['233']。
接下来,当你创建一个从emp 100到200相反方向的关系时,这个关系是一个新关系,除了参与节点相同之外,它与之前的关系无关。
在这个查询中
MATCH (e1:EMP),(e2:EMP)
WHERE e1.NUMBER='100' AND e2.NUMBER='200'
MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = "235" +r.DURATION[0..]
r.DURATION 为空,因为 DURATION 属性 在从 e1(100) 到 e2(200) 的关系 r 上尚不存在。
如果你想在特定方向上为关系添加持续时间,你可以使用类似这样的东西
MATCH (e1:EMP),(e2:EMP)
WHERE e1.number='100' AND e2.number='200' MERGE (e1)-[r:CALLED]->(e2)
SET r.DURATION =["335"]+coalesce(r.DURATION,[])
请注意,这会根据从 emp 100 到 200 的关系将新的持续时间值插入到数组中。从 emp 200 到 100 的值是未读和未修改的。如果您希望从相反方向的关系中追加值,则必须先匹配它以获得 DURATION 属性。这样做意味着在两个方向上的关系具有相同的 属性 值,然后我会质疑为什么你需要两个关系而不是一个关系。
如果方向不重要,则使用 e1 和 e2 之间的单一关系。
我正在 neo4j 中创建 2 个节点,其方向属性如下:
两个员工都在互相打电话,他们通过 CALLED 关系相互联系..
MATCH (e1:EMP),(e2:EMP) WHERE e1.NUMBER='200' AND e2.NUMBER='100' MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = ['233']
我的结果如下。
当我在反向创建关系时:
MATCH (e1:EMP),(e2:EMP) WHERE e1.NUMBER='100' AND e2.NUMBER='200' MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = "235" +r.DURATION[0..]
我的结果有些奇怪
如何在集合中添加两个属性,使其看起来像
双向的概念只有在查询的时候才有。在建立关系时,每个关系都必须有一个方向。你有两个 different 关系,每个方向一个。 从 emp 200 到 100 的关系有一个名为 duration 的 属性,值为 ['233']。
接下来,当你创建一个从emp 100到200相反方向的关系时,这个关系是一个新关系,除了参与节点相同之外,它与之前的关系无关。 在这个查询中
MATCH (e1:EMP),(e2:EMP)
WHERE e1.NUMBER='100' AND e2.NUMBER='200'
MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = "235" +r.DURATION[0..]
r.DURATION 为空,因为 DURATION 属性 在从 e1(100) 到 e2(200) 的关系 r 上尚不存在。
如果你想在特定方向上为关系添加持续时间,你可以使用类似这样的东西
MATCH (e1:EMP),(e2:EMP)
WHERE e1.number='100' AND e2.number='200' MERGE (e1)-[r:CALLED]->(e2)
SET r.DURATION =["335"]+coalesce(r.DURATION,[])
请注意,这会根据从 emp 100 到 200 的关系将新的持续时间值插入到数组中。从 emp 200 到 100 的值是未读和未修改的。如果您希望从相反方向的关系中追加值,则必须先匹配它以获得 DURATION 属性。这样做意味着在两个方向上的关系具有相同的 属性 值,然后我会质疑为什么你需要两个关系而不是一个关系。
如果方向不重要,则使用 e1 和 e2 之间的单一关系。