如果存在则更新两个节点之间的关系,如果不存在则创建新的关系 NEO4j

用户74091

我想写一个查询;

  • 如果一个节点已经存在,则更新两个节点之间的关系,或者
  • 如果关系不存在,则在两个节点之间创建一个。

实际上,这是允许程序的一个用户“阻止”该程序的另一个用户,无论这两个用户之前是否有任何类型的关系(可以有任意数量的关系)。对于查询的一半,如果存在,则可选地返回关系;

MATCH (a:user {name: {aParam}) 
OPTIONAL MATCH (a) -[r]- (b:user {name: {bParam}) 
RETURN type(r), a

对于查询的另一半,更新两个节点之间的关系(假设它已经存在);

MATCH (a:user {name: {aParam}) <- [r:originalRelationship] - (b:user {name: {bParam})
WITH a, r, b
MERGE (a) - [:updatedRelationship] - (b)
WITH r
DELETE r

但是结合这两个我还没有生成一个工作示例,我尝试将它们组合在一起,但弗兰肯斯坦并没有活过来;

MATCH (a:user {name: {aParam})
OPTIONAL MATCH (a) - [r] - (b:user {name: {bParam})
WITH a, b, r
MERGE (a) - [:block] -> (b)
WITH r
DELETE r

有人可以在这里指出我的错误并指出正确的方向吗?

喜满树耆那教

由于您涉及多个关系,并且您想删除所有现有关系并将其替换为 Blocked,您可以尝试以下操作:

Match (p1:Person{name:"hj"}),(p2:Person{name:"bg"})
OPTIONAL Match (p1)-[r]->(p2) where TYPE(r)<>"Blocked"
MERGE (p1)-[:Blocked{blocked: True}]->(p2)
DELETE r
return *

保留以下部分以防它对某人有帮助。如果您只有 1 种类型的关系,并且只想更新值,则可以使用以下命令:

您可以将Merge子句与ON MATCHON CREATE选项一起使用。

由于你没有明确指定节点和关系结构,我再举一个例子。考虑 2 Person 节点,其中字段“name”唯一标识该人。

如果不存在,则查询会创建关系,如果它已经存在,您可以指定要更新的字段。

Match (p1:Person{name:"hj"}),(p2:Person{name:"bg"})
Merge (p1)-[r:originalRelationship]->(p2)
ON CREATE SET r.created = True
ON MATCH SET r.updated = True
return p1,p2,r

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Neo4j gem-仅在两个节点之间不存在时才创建关系

来自分类Dev

在Neo4J中,创建两个节点之间的关系,但是如果其中一个节点不存在,则在同一调用中创建关系

来自分类Dev

如果不存在则在 Neo4j 中创建关系,如果存在则更新属性值

来自分类Dev

Cypher Neo4j在两个节点之间创建关系并避免双向关系

来自分类Dev

如果属性存在,则 Neo4J 合并节点并创建另一个具有关系的节点

来自分类Dev

Neo4j Cypher MATCH(如果不存在)

来自分类Dev

Neo4j创建(如果不存在),否则更新

来自分类Dev

如何使用neo4j的.net客户端检查两个节点之间是否存在关系

来自分类Dev

检查Neo4J中2个节点之间是否存在关系,如果没有,则创建具有随机ID的节点

来自分类Dev

仅当neo4j中不存在节点时如何创建新节点

来自分类Dev

如何在neo4j中创建具有相同节点名称的两个节点之间的关系

来自分类Dev

Neo4J如何在已经存在的2个节点之间添加关系

来自分类Dev

在Neo4j节点之间创建关系

来自分类Dev

在neo4j中创建节点之间的关系

来自分类Dev

Neo4J 优化创建节点之间的关系

来自分类Dev

如何找到neo4j中两个节点之间最短的关系?

来自分类Dev

计算两个特定节点之间的关系数 - Neo4j / Cypher

来自分类Dev

neo4j.rb检查关系已经存在于两个节点之间

来自分类Dev

使用Cypher在Neo4j中的两个节点之间创建相同类型的多个关系

来自分类Dev

neo4j更新数组属性(如果存在)

来自分类Dev

neo4j更新数组属性(如果存在)

来自分类Dev

Neo4j gem-查询不存在的关系

来自分类Dev

Neo4j gem-查询不存在的关系

来自分类Dev

如何使用带有GraphRepository的springdata Neo4j从两个节点之间的关系集合中获取关系

来自分类Dev

在Neo4j(4.1.3)中,如果一个节点不存在,我如何一个接一个地匹配3个节点

来自分类Dev

Neo4j混合节点之间是否存在扩展关系

来自分类Dev

neo4j条件关系

来自分类Dev

Neo4j,匹配关系在何处

来自分类Dev

Neo4j关系的属性

Related 相关文章

  1. 1

    Neo4j gem-仅在两个节点之间不存在时才创建关系

  2. 2

    在Neo4J中,创建两个节点之间的关系,但是如果其中一个节点不存在,则在同一调用中创建关系

  3. 3

    如果不存在则在 Neo4j 中创建关系,如果存在则更新属性值

  4. 4

    Cypher Neo4j在两个节点之间创建关系并避免双向关系

  5. 5

    如果属性存在,则 Neo4J 合并节点并创建另一个具有关系的节点

  6. 6

    Neo4j Cypher MATCH(如果不存在)

  7. 7

    Neo4j创建(如果不存在),否则更新

  8. 8

    如何使用neo4j的.net客户端检查两个节点之间是否存在关系

  9. 9

    检查Neo4J中2个节点之间是否存在关系,如果没有,则创建具有随机ID的节点

  10. 10

    仅当neo4j中不存在节点时如何创建新节点

  11. 11

    如何在neo4j中创建具有相同节点名称的两个节点之间的关系

  12. 12

    Neo4J如何在已经存在的2个节点之间添加关系

  13. 13

    在Neo4j节点之间创建关系

  14. 14

    在neo4j中创建节点之间的关系

  15. 15

    Neo4J 优化创建节点之间的关系

  16. 16

    如何找到neo4j中两个节点之间最短的关系?

  17. 17

    计算两个特定节点之间的关系数 - Neo4j / Cypher

  18. 18

    neo4j.rb检查关系已经存在于两个节点之间

  19. 19

    使用Cypher在Neo4j中的两个节点之间创建相同类型的多个关系

  20. 20

    neo4j更新数组属性(如果存在)

  21. 21

    neo4j更新数组属性(如果存在)

  22. 22

    Neo4j gem-查询不存在的关系

  23. 23

    Neo4j gem-查询不存在的关系

  24. 24

    如何使用带有GraphRepository的springdata Neo4j从两个节点之间的关系集合中获取关系

  25. 25

    在Neo4j(4.1.3)中,如果一个节点不存在,我如何一个接一个地匹配3个节点

  26. 26

    Neo4j混合节点之间是否存在扩展关系

  27. 27

    neo4j条件关系

  28. 28

    Neo4j,匹配关系在何处

  29. 29

    Neo4j关系的属性

热门标签

归档