Cypher Linked List:如何按索引取消移位和替换

2024-05-24

我正在尝试按照此处的推荐使用 Neo/Cypher 创建链表结构:创建时CYPHER存储相同标签的节点关系顺序 https://stackoverflow.com/questions/33263822/cypher-store-order-of-node-relationships-of-the-same-label-when-i-create/33267061#33267061

(p:Parent)-[r1:PARENTID_RELTYPE]->(c1:Child)-[r2:PARENTID_RELTYPE]->(c2:Child)-[r3:PARENTID_RELTYPE]->(c3:Child)

但我无法理解所需事件序列的语法,以便将新节点转移到结构上或用不同的节点替换特定索引。

我感到困惑的是我需要添加新节点并修复使旧节点仍然位于链表结构内的结构的部分。源自父节点的每种类型 (PARENTID_RELTYPE) 应该只有一个关系;但每个父母可能存在多种不同类型的关系。子节点可以在 LinkedList 中多次出现,并且子节点可以在多个父节点的 LinkedList 中或在同一父节点但不同关系类型的 LinkedList 中出现。

因此,当我尝试取消转换时,可能会发生以下三种情况之一:

  1. 不存在通过 PARENTID_RELTYPE 链接到父级的现有子级

  2. 已经存在一个通过 PARENTID_RELTYPE 链接到父节点的子节点

  3. 已经存在一个通过 PARENTID_RELTYPE 链接到父级的子节点,并且该子节点只是我试图取消转换到链表结构的子节点的副本(在这种情况下,预期结果是在链表的零索引和第一个索引)。

上面提到的答案网址极大地帮助我理解如何在 Neo/Cypher 中读取链表结构,但由于在 cypher 中处理条件的替代方式,我无法理解如何写入该结构(以及删除从他的结构)。

以下是我最初的尝试,但我对需要语法做什么感到有些困惑。

MATCH (a:%s {id: {_parentnodeid}}), (b:%s {id: {_id}})
MERGE  a-[relold:%s]->b
  ON CREATE
     SET relold.metadata = {_metaData}
  ON MATCH
     ...

我非常感谢您提供的帮助。


[更新]

在以下查询中,为了简单起见,我假装:

  • 我们发现Parent按名称感兴趣的节点。
  • 当前兴趣的关系类型是Foo.

一般注意事项:

  • The OPTIONAL MATCH子句查找应在插入的子项之后的同级(如果有)。
  • The FOREACH子句负责将该同级(如果有)链接到要插入的子级,然后删除与该同级的过时关系。
  1. To unshift the Child有一个id of 123就在之后Parent node:

    MATCH (p:Parent {name:"Fred"})
    OPTIONAL MATCH (p)-[r:Foo]->(c:Child)
    WITH p, r, COLLECT(c) AS cs
    MERGE (cNew:Child {id:123})
    CREATE (p)-[rNew:Foo]->(cNew)
    FOREACH (x IN cs | 
      CREATE (cNew)-[:Foo]->(x)
      DELETE r)
    RETURN p, rNew, cNew;
    
  2. To insert the Child节点有一个id of 123在索引 4 处(即,使其成为第五个子元素):

    MATCH (p:Parent {name:"Fred"})
    MATCH (p)-[:Foo*3]->()-[r:Foo]->(c:Child)
    OPTIONAL MATCH (c)-[r1:Foo]->(c1:Child)
    WITH c, r1, COLLECT(c1) AS c1s
    MERGE (cNew:Child {id:123})
    CREATE (c)-[rNew:Foo]->(cNew)
    FOREACH (x IN c1s | 
      CREATE (cNew)-[:Foo]->(x)
      DELETE r1)
    RETURN c, rNew, cNew;
    
  3. To replace the Child在索引 4(即第 5 个孩子)处Child有一个id of 123:

    MATCH (p:Parent { name:"Fred" })
    MATCH (p)-[:Foo*4]->(c0)-[r:Foo]->(c:Child)
    OPTIONAL MATCH (c)-[r1:Foo]->(c1:Child)
    WITH c0, r, c, r1, COLLECT(c1) AS c1s
    MERGE (cNew:Child { id:123 })
    CREATE (c0)-[rNew:Foo]->(cNew)
    DELETE r, c
    FOREACH (x IN c1s | 
       CREATE (cNew)-[:Foo]->(x)
       DELETE r1)
    RETURN c0, rNew, cNew;
    

    注:DELETE r, c子句总是删除被替换的节点(c)。仅当这是您真正想要发生的事情时才合适,并且只有在以下情况下才会成功c没有其他关系r。要探索如何满足更具体的需求,请提出一个新问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cypher Linked List:如何按索引取消移位和替换 的相关文章

随机推荐

  • Facebook服务器端登录、CORS

    我正在实现一个带有 FB 服务器端登录的网站 简化步骤如下 一个简单的按钮触发 JS 脚本 该脚本调用我的后端 APIhttps localhost fblogin function sendFbLoginData get https lo
  • 如何在多租户设置中生成 firebase 自定义令牌

    我一直在尝试向我的应用程序添加对多租户的支持 我像这样初始化 const app firebase initializeApp const tenantManager app auth tenantManager const tenant
  • React 功能组件:作为函数调用与作为组件调用

    假设我有一个功能组件 const Foo props gt div props name div 直接作为函数调用有什么区别 const fooParent gt div Foo name foo div 与将其称为组件相比 const f
  • perl 和 java 正则表达式功能之间有什么区别?

    perl 和 java 在支持哪些正则表达式术语方面有什么区别 这个问题仅涉及正则表达式 并且特别排除了how可以使用正则表达式 即使用正则表达式的可用函数 方法 以及语言之间的语法差异 例如java要求转义反斜杠等 特别令人感兴趣的是 j
  • 使用 ECMA 脚本向节点(页面)添加新属性

    我需要在页面激活时向页面添加属性 我决定建立一个工作流程 在激活步骤之前执行相同的操作 我的自定义工作流程步骤 激活步骤之前的步骤 使用 ECMA 脚本来实现此目的 这是我到目前为止所拥有的 var workflowData granite
  • 我可以阻止history.popstate在初始页面加载时触发吗?

    我正在开发一个通过 AJAX 提供内容的网站 如果您单击菜单中的某个项目 内容 div 会更新为 get回应 没什么花哨的 我正在实施history pushState允许使用浏览器的后退 前进按钮进行导航 我有以下内容可以在历史导航上加载
  • 名称属性的 CSS 选择器?

    这可能是一个愚蠢的问题 但是属性的 CSS 选择器是什么 a 那是 名字 document body innerHTML myString anchor HTML String 这段 JavaScript 创建了一个 a 带有名称的元素 H
  • 合理的分析事件 API - 防止操纵

    根据合理的分析文档 https plausible io docs events api 您可以向 events api记录页面浏览量的端点 我是自托管的 Plausible 并且令我惊讶的是 我可以使用 Postman 使用一些虚拟数据简
  • 从子视图导航控制器访问顶部导航控制器

    我有一个像这样设置的视图和控制器 标签 栏控制器 1 内是根视图控制器 2 内是一个以编程方式创建的导航控制器 它在根视图控制器中显示为子视图 我想做的是访问顶部选项卡栏 导航控制器 以便我可以将视图推送到上面 我尝试了parentView
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 通过updateTable创建多个GSI

    我在用着更新表 http docs aws amazon com AWSJavaScriptSDK latest AWS DynamoDB html updateTable property根据 DynmaoDB 的规定 根据文档 如果我们
  • 无法绑定到“属性 X”,因为它不是“子组件”的已知属性

    在我的项目中 我有一个通用类和一些从该类继承的其他组件 BaseRdnInput ts Injectable export abstract class BaseRdnInput implements ControlValueAccesso
  • 如何使用 aerospike 加载器在 aerospike 中加载嵌套的 csv 文件?

    我已将 JSON 文件转换为 CSV 格式 现在使用 aerospike 加载器将 CSV 加载到 Aerospike 中 我可以为简单的结构执行此操作 但如何修改 allDatatype json 的内容以在 Aerospike 中加载嵌
  • 在java中是否可以使用反射创建没有无参数构造函数的“空白”类实例?

    我有一个没有默认构造函数的类 我需要一种方法来获取此类的 空白 实例 空白 意味着实例化后所有类字段都应具有默认值 如 null 0 等 我问这个问题是因为我需要能够序列化 反序列化大对象树 而且我无法访问该对象类的源 并且类既没有默认构造
  • 最新 .Net MongoDb.Driver 的连接问题

    我创建了一个 MongoLab 沙箱数据库 我与 MongoChef 连接 效果很好 我通过 Nuget 安装了 MongoDB Driver 2 2 2 我编写了一些简单的 C 演示代码 但就是无法使其工作 连接字符串是直接从 Mongo
  • 为什么 html 中的 AngularJS 错误没有显示在控制台中?

    Here s a fiddle http jsfiddle net 6y7odxmj 3 用于说明 当 ng click 指令 例如 调用未在控制器的 scope 或其父级 上定义的函数时 它会默默地失败 当我尝试调试网页时 这种行为令人抓
  • CSS3 属性 webkit-overflow-scrolling:touch 错误

    iOS 5 发布了网页设计师的新属性 webkit overflow scrolling touch它使用 iOS 设备硬件加速器为可滚动 div 提供本机滚动 当在我们的开发网站上实施时 它确实有效 但效果不佳 我相信可能存在 CSS 问
  • Firebird 和 Android JDBC 驱动程序

    火鸟有问题 我从未与 DB 合作过 服务器 firebird 1 5 上的数据库 添加库 firebird full 2 2 4到 libs 文件夹 将其添加到 Gradle implementation fileTree libs 将其添
  • SlidingPaneLayout setCoveredFadeColor () 和 setSliderFadeColor()

    我正在使用SlidingPaneLayout并希望在滑块右窗格打开时在左窗格上设置灰色渐变颜色 在右窗格关闭且左窗格完全可见时在左窗格上设置透明渐变颜色 我知道这是默认行为SlidingPaneLayout 但使用默认实现时 我在横向模式下
  • Cypher Linked List:如何按索引取消移位和替换

    我正在尝试按照此处的推荐使用 Neo Cypher 创建链表结构 创建时CYPHER存储相同标签的节点关系顺序 https stackoverflow com questions 33263822 cypher store order of