密码查询,用于将节点从一种列表结构移动到另一种列表结构

kkris1983

我们具有以下结构,其中User是起点,带有数字的节点标记为Invitation,其值指定其属性id

在此处输入图片说明

我正在寻找一种创建查询的方法,该查询将节点从VALID_INVITATIONS关系所指向的列表移动到INVALID_INVITATIONS关系所指向的另一个列表。移动的节点应在新列表中首先设置。

我想出了一个可行的解决方案,但是由于缺乏Cypher的知识和经验,所以请向社区提供帮助和改进。正如您将看到的,有很多命令式代码“ hacks”(CASE WHEN),而不是Cypher应该声明的。我将不胜感激所有的提示和建议

MATCH (u:User)
MATCH (u)-[:VALID_INVITATIONS|PREVIOUS*]->(current:Invitation{ id:3 })

//find (current) node's predecessor which might pointing on it through VALID_INVITATIONS or PREVIOUS relationships
OPTIONAL MATCH (u)-[oldValidRel:VALID_INVITATIONS]->(current)
OPTIONAL MATCH (predecessor:Invitation)-[oldPredecessorRel:PREVIOUS]->(current)
//find (current) node's subsequent node
OPTIONAL MATCH (current)-[oldSubsequentRel:PREVIOUS]->(subsequent:Invitation)

//first we re-create connections in list pointed by VALID_INVITATION relationship for consistency
WITH *, CASE subsequent WHEN NULL THEN [] ELSE [1] END AS hasSubsequent

//if (current) node is connected to (u) User we replace VALID_INVITATIONS relationship
FOREACH(_ IN CASE oldValidRel WHEN NULL THEN [] ELSE [1] END |
    DELETE oldValidRel

    //if (subsequent) node exist then we need to re-link it
    FOREACH(_ IN hasSubsequent |
        MERGE (u)-[:VALID_INVITATIONS]->(subsequent)
        DELETE oldSubsequentRel
    )
)

//following condition should be XOR with the one above (only one must be executed)
//if (current) node has another Invitation node as predecessor in list
FOREACH(_ IN CASE oldPredecessorRel WHEN NULL THEN [] ELSE [1] END | 
    DELETE oldPredecessorRel

    //if (subsequent) node exist then we need to re-link it
    FOREACH(_ IN hasSubsequent |
        MERGE (predecessor)-[:PREVIOUS]->(subsequent)
        DELETE oldSubsequentRel
    )
)

WITH u, current

//now it is time to move (current) node to beginning of the list pointed by  INVALID_INVITATIONS relationship
MERGE (u)-[:INVALID_INVITATIONS]->(current)
WITH u, current
//find obsolete oldRel:INVALID_INVITATIONS relationship
MATCH (current)<-[:INVALID_INVITATIONS]-(u)-[oldRel:INVALID_INVITATIONS]->(oldInv)
DELETE oldRel
//link (current) with previously "first" node in INVALID_INVITATIONS list
MERGE (current)-[:PREVIOUS]->(oldInv)
kkris1983

从@cybersam获得一些“乐趣”和帮助后,我想出了一个简短得多的解决方案:

MATCH (u:User)-[:VALID_INVITATIONS|PREVIOUS*]->(current:Invitation {id:4})
MATCH (predecessor)-[oldPredecessorRel:VALID_INVITATIONS|PREVIOUS]->(current)
OPTIONAL MATCH (current)-[oldSubsequentRel:PREVIOUS]->(subsequent)

CALL apoc.do.when(subsequent IS NOT NULL, "CALL apoc.create.relationship($p, $r, NULL, $s) YIELD rel RETURN rel", "", {p:predecessor, r:type(oldPredecessorRel), s:subsequent}) YIELD value

DELETE oldPredecessorRel, oldSubsequentRel

WITH u, current
MERGE (u)-[:INVALID_INVITATIONS]->(current)
WITH u, current
MATCH (oldInv)<-[oldRel:INVALID_INVITATIONS]-(u)-[:INVALID_INVITATIONS]->(current)
DELETE oldRel
MERGE (current)-[:PREVIOUS]->(oldInv)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将文件从一种文件夹结构移动到另一种文件夹结构

来自分类Dev

将文件从一种文件夹结构移动到另一种文件夹结构

来自分类Dev

将 JSON 从一种结构转换为另一种结构

来自分类Dev

如何将字段从一种结构复制到另一种结构

来自分类Dev

将一种 JSON 结构转换为另一种结构

来自分类Dev

将数据从一种数据结构映射到另一种

来自分类Dev

如何将数据从一种形式放入另一种形式的列表框中

来自分类Dev

带有另一种结构的结构

来自分类Dev

在离子中从一种状态移动到另一种状态时,如何消除滑动效应?

来自分类Dev

将一种类型的列表转换为另一种类型

来自分类Dev

将一种数据结构转换为另一种数据结构

来自分类Dev

使用 XSL 将一种 XML 结构转换为另一种 XML 结构

来自分类Dev

将图像从一种格式批量转换为另一种格式,同时保持目录结构并删除原始图像

来自分类Dev

在PHP中将下拉选择列表的内容从一种形式传递到另一种形式

来自分类Dev

用于将视频从一种格式转换为另一种格式的库

来自分类Dev

如何执行从一种形式到另一种形式的更新查询

来自分类Dev

将MySQL日期从一种格式转换为另一种格式

来自分类Dev

将图片从一种格式批量转换为另一种格式?

来自分类Dev

将程序从一种架构转移到另一种架构

来自分类Dev

将数据从一种纹理复制到另一种-OpenGL

来自分类Dev

将信息从一种形式传递到另一种形式?

来自分类Dev

将数据从一种状态传递到另一种状态

来自分类Dev

将时间戳从一种格式转换为另一种格式

来自分类Dev

将范围从一种VB功能传递到另一种

来自分类Dev

将视图从一种布局动画化为另一种布局

来自分类Dev

将javascript对象从一种形式转换为另一种形式

来自分类Dev

将图片从一种格式批量转换为另一种格式?

来自分类Dev

将数据从一种纹理复制到另一种-OpenGL

来自分类Dev

将DateTime格式从一种形式更改为另一种形式

Related 相关文章

  1. 1

    将文件从一种文件夹结构移动到另一种文件夹结构

  2. 2

    将文件从一种文件夹结构移动到另一种文件夹结构

  3. 3

    将 JSON 从一种结构转换为另一种结构

  4. 4

    如何将字段从一种结构复制到另一种结构

  5. 5

    将一种 JSON 结构转换为另一种结构

  6. 6

    将数据从一种数据结构映射到另一种

  7. 7

    如何将数据从一种形式放入另一种形式的列表框中

  8. 8

    带有另一种结构的结构

  9. 9

    在离子中从一种状态移动到另一种状态时,如何消除滑动效应?

  10. 10

    将一种类型的列表转换为另一种类型

  11. 11

    将一种数据结构转换为另一种数据结构

  12. 12

    使用 XSL 将一种 XML 结构转换为另一种 XML 结构

  13. 13

    将图像从一种格式批量转换为另一种格式,同时保持目录结构并删除原始图像

  14. 14

    在PHP中将下拉选择列表的内容从一种形式传递到另一种形式

  15. 15

    用于将视频从一种格式转换为另一种格式的库

  16. 16

    如何执行从一种形式到另一种形式的更新查询

  17. 17

    将MySQL日期从一种格式转换为另一种格式

  18. 18

    将图片从一种格式批量转换为另一种格式?

  19. 19

    将程序从一种架构转移到另一种架构

  20. 20

    将数据从一种纹理复制到另一种-OpenGL

  21. 21

    将信息从一种形式传递到另一种形式?

  22. 22

    将数据从一种状态传递到另一种状态

  23. 23

    将时间戳从一种格式转换为另一种格式

  24. 24

    将范围从一种VB功能传递到另一种

  25. 25

    将视图从一种布局动画化为另一种布局

  26. 26

    将javascript对象从一种形式转换为另一种形式

  27. 27

    将图片从一种格式批量转换为另一种格式?

  28. 28

    将数据从一种纹理复制到另一种-OpenGL

  29. 29

    将DateTime格式从一种形式更改为另一种形式

热门标签

归档