Neo4j:使用可选关系实现软删除

2023-12-06

我正在尝试在 Neo4j 中实现软删除。从 Alice 的角度来看,Cypher 中描述的图是这样的:

(clyde:User)<-[:FOLLOWS]-(alice:User)-[:LIKES]->(bob:User)

我没有实际删除节点及其关系,而是

  1. 更改其标签,使其无法再直接查找,即删除其标签User标签并添加_User标签(注意下划线)
  2. 替换它的关系,这样我的正常查询就无法再访问它,例如删除其:FOLLOWS关系并将其替换为:_FOLLOWS关系。

因此,这基本上相当于将一行移动到关系数据库中的归档表中。我认为这是一种非常有效的方法,因为您实际上永远不会访问图表中已被软删除的部分。此外,您不必修改任何现有查询。

软删除Alice的结果应该是这样的:

(clyde:User)<-[:_FOLLOWS]-(alice:_User)-[:_LIKES]->(bob:User)

我第一次尝试查询是这样的:

match (user:User {Id: 1})
optional match (user)-[follows:FOLLOWS]->(subject)
remove user:User set user:_User
delete follows
create (user)-[:_FOLLOWS]->(subject);

问题是,当该用户没有关注任何人时,查询会尝试在之间创建关系user and null因为第二个匹配是可选的,所以它给了我这个错误:Other node is null.

我的第二次尝试是这样的:

match (user:User {Id: 1})
remove user:User set user:_User
optional match (user)-[follows:FOLLOWS]->(subject)
foreach (f in filter(f in collect({r: follows, n: subject}) where f.r is not null) | delete f.r create (user)-[:_FOLLOWS]->(f.n));

因此,我将关系和主题放入地图中,将这些地图收集到一个集合中,扔掉所有“空”地图并循环遍历该集合。但是这个查询给了我这个错误:

SyntaxException: Invalid input '.': expected an identifier character, node labels, a property map, whitespace or ')' (line 1, column 238)

有谁知道我该如何解决这个问题?

谢谢, 扬


能不能先换标签,再匹配关系?那么您应该能够使用“非可选”匹配,而不必处理没有以下关系的情况,例如

MATCH (user:User {Id: 1})
REMOVE user:User SET user:_User
WITH user
MATCH (user)-[follows:FOLLOWS]->(subject)
DELETE follows
CREATE (user)-[:_FOLLOWS]->(subject)

或者您可以携带用户、关注者和主题,并在主题不为空的情况下进行过滤。就像是

MATCH (user:User {Id: 1})
OPTIONAL MATCH (user)-[follows:FOLLOWS]->(subject)
REMOVE user:User SET user:_User
WITH user, follows, subject
WHERE subject IS NOT NULL
DELETE follows
CREATE (user)-[:_FOLLOWS]->(subject)

Edit:
如果问题是您想对多种关系执行此操作,那么您可以尝试

MATCH (user:User {Id: 1})
REMOVE user:User SET user:_User
WITH user 
MATCH (user)-[f:FOLLOWS]->(other)
DELETE f 
CREATE (user)-[:_FOLLOWS]->(other)
WITH user LIMIT 1 
MATCH (user)-[l:LIKES]->(other)
DELETE l 
CREATE user-[:_LIKES]->(other)

您可以继续将其扩展到其他关系类型,但一定要限制user当你携带时,因为有多个匹配项(user)-[r]->(other)意味着用户有多个结果,或者您将多次运行下一个查询部分。

我认为在 cypher 中没有通用的方法可以做到这一点,因为您无法动态构建关系类型(即CREATE (a)-[newRel:"_"+type(oldRel)]->(b)不起作用)

您正在寻找类似的东西还是我误解了您的问题?

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

Neo4j:使用可选关系实现软删除 的相关文章

  • Neo4j 客户端使用“DateTime?”展开

    我目前正在尝试展开具有 日期时间 的 TravelEdges 列表 但我不断收到以下错误 CypherTypeException 类型不匹配 需要一个地图 但是字符串 2018 05 21T08 38 00 我目前正在使用最新版本的 neo
  • 如何删除neo4j中的所有索引?

    我想使用 cypher 批量删除所有存在的索引 可以吗 我正在使用 neo4j 3 4 7 DROP INDEX ON Label attributename 如果我在稍后阶段创建相同的索引 它会替换现有索引吗 删除所有索引和约束的快速方法
  • python 单元测试中的 Neo4j 临时数据库

    我正在尝试为将与 Neo4j 图形数据库交互的 python 项目创建单元测试 目前 我正在实现嵌入式图形数据库 但如果我选择将其部署到 Web 应用程序 我可能会迁移到 REST 接口 我已经安装了嵌入式 neo4j v1 9rc2pro
  • 如何在 Neo4j 遍历的每一步中指定使用哪种关系类型作为当前节点的函数?

    我想使用 neo4j 遍历 API 遍历我的图 但我需要能够指定在每一步使用哪种关系类型 并且要使用的关系类型需要是当前节点的函数 有没有办法做到这一点 在当前的 Traverser API 中 您无法选择要遍历的确切关系 相反 您可以采用
  • Cypher - 匹配两个不同的可能路径并返回两者

    我有一个数据集 我在这里作为示例表示 http console neo4j org id 3dq78v http console neo4j org id 3dq78v 我想要做的是对于图表中的每个 Z 节点 该示例只有一个 但我有很多 我
  • 在 Neo4j 中可视化连接的组件

    我可以使用下面的代码找到图中最密集连接的组件 CALL algo unionFind stream pnHours YIELD nodeId setId groupBy setId storing all node ids of the s
  • Neo4j 入门

    我对 neo4j 完全陌生 很抱歉问这样一个基本问题 我已经安装了 neo4j 我正在使用 shell localhost 7474 webadmin console 我正在寻找一个很好的示例 它使用一些 shell 命令从预先存在的图形数
  • Neo4j 的 Cypher 查询语言是开源的吗?

    Neo4j的语言Cypher的现状如何 我真的很喜欢它 但我想避免 Neo4j 锁定 是否还有像 Gremlin 中那样的其他 Cypher 界面 Regards Cypher 完全是 OSS 请参阅https github com neo
  • 使用 Cypher,如何返回仅包含其属性子集的节点

    假设我在 Neo4j 中创建了一个节点 CREATE Thing a foo b bar 我可以编写一个查询来获取该节点及其所有属性 MATCH n Thing a foo RETURN n 返回 a foo b bar 但是是否可以匹配一
  • 如何将dbpedia导入neo4j? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要将 dbpedia 导入 neo4j 我从这里下载 dbpedia http wiki dbpedia org Download
  • 通过 awselb 使用 ssl 时的 neo4j java 驱动程序问题

    I am using neo4j community version 3 1 1 and enterprise edition version 3 0 1 with ssl configured through awselb To conn
  • 一种父子关系级联软删除的方法

    我有一个简单的架构 其中使用软删除 这就是它的设计方式并且无法更改 有两个表参与该架构 Company id is deleted and Employee id company id is deleted where company id
  • 在巨大的数据集上创建独特的节点和关系 NEO4J

    我的问题与这个非常相似 如何通过neo4j中导入的csv文件创建独特的节点和关系 https stackoverflow com questions 25090255 how to create unique nodes and relat
  • Neo4j 在 Cypher 查询运行中仅使用一个核心

    当我在 UI 中运行 Cypher 查询时 服务器中只有一个核心正在运行 查询会卡住或响应非常慢 我使用 Neo4j 3 0 7 社区 有人知道我可以使用所有核心进行哪些调整吗 单个 Cypher 查询仅限于单个线程 看到这个tweet h
  • 如何在ubuntu中从源代码安装postgresql的AGE扩展? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 由于我想尝试一下 Apache Age of postgresql 所以在阅读文档时我迷失了方向 有什么简单的解决方案吗 这是有关如何
  • 如何返回每个另一个节点属性的最大计数

    我需要计算一位作曲家的音乐作品每十年被演奏了多少次 然后只返回每十年演奏次数最多的一首作品 除了过滤除每十年最高计数之外的所有内容之外 该密码可以执行所有操作 match c Composer CREATED BY w Work lt 2
  • 参数映射不能用于 MERGE 模式

    我收到错误参数映射不能在合并模式中使用 我如何解决此错误 我正在使用下面的代码 我非常感谢任何帮助 提前致谢 MERGE u Person names RETURN u and data2 names name Keanu Reeves1
  • 启用远程访问neo4j 4.2社区版

    由于在家工作 我需要一种方法来监视远程 neo4j 实例 最好通过 Web 浏览器实例 在过去 例如在3 0中 它可以通过以下方式轻松实现修改单个配置行 https neo4j com developer kb how do i enabl
  • 是否有工具可以将 Neo4j 图转储为 Cypher 并从 Cypher 重新加载它?

    每个熟悉 MySQL 的人都可能使用过 mysqldump 命令 它可以生成代表 MySQL 数据库中的架构和数据的 SQL 语句文件 这些 SQL 文本文件通常用于多种用途 备份 播种副本 在安装之间复制数据库 将产品数据库复制到临时环境
  • 如何在图数据库(如 Neo4j)中对现实世界的关系进行建模?

    我有一个关于在图形数据库中建模的一般性问题 但我似乎无法解决这个问题 您如何建模这种类型的关系 牛顿发明了微积分 In a 简单图 http docs neo4j org chunked snapshot graphdb neo4j rel

随机推荐

  • SASS:循环内部属性

    我想为单个属性生成多个值 background image radial gradient circle primary 10 transparent 10 radial gradient circle primary 10 transpa
  • Python连续TCP连接

    我是套接字编程新手 并试图重新回到Python 我想编写一个简单的 TCP 程序 它将持续维护连接 直到达到某个结束状态 在这种情况下 客户端发送 关闭 这对于第一次迭代来说效果很好 但是在我发送的第二件事上它冻结了 我不确定为什么 有人可
  • 二进制到 Base64 (Delphi)

    我怎样才能获得内容exe文件并将其转换为Base64编码 Edit I use D2010我想知道这到底是怎么可能的 open an exe file convert its content into base64 在Delphi 2009
  • 无法将“User”分配给 FutureBuilder 中的参数类型“Future

    我试图确定用户是否使用 FirebaseAuth instance currentUser 登录 Flutter Firebase 然后返回 LoginScreen 或 Dashboard 但出现错误 我尝试根据 FirebaseFlutt
  • 在运行时更改 IconTintColorBehavior 的 TintColor 不起作用

    你好 我正在测试新的IconTintColorBehavior在 CommunityToolkit Maui 1 1 0 中 它可以查找 但仅在启动应用程序时有效 如果我改变AppTheme在运行时 它不起作用 还有其他人观察过这种行为吗
  • 滑动功能无法使用 jquerymobile 和 android 的phonegap 工作

    我是phonegap的新手 我正在使用phonegap for android在eclipse中创建应用程序 我在xml文件夹中添加了phonegap jar和插件 我还添加了jquery库和phonegap1 1 0 js 我正在尝试实现
  • 在python中生成正弦波声音

    我一直在尝试使用以下代码生成正弦波并在我的扬声器中播放它 但这听起来很糟糕 有人知道为什么吗 听起来不像正弦波 dur int FS float duration 1000 for i in range dur a frequency i
  • 连接到服务器上运行的 virtualenv/django 时如何解决 ERR_CONNECTION_REFUSED

    我已经在 ubuntu 服务器上的用户部分安装了 virtualenv 和 Django 一切似乎都安装正确 当我启动服务器时python manage py runserver我收到以下消息 这似乎是正确的 Performing syst
  • 以绘图单位指定 matplotlib 散点大小

    我想不使用点或像素而是使用绘图单位来指定散点大小 以下面为例 import matplotlib pyplot as plt x 0 y 0 plt scatter x y plt show 这会产生如下图 比如说 如果我希望标记的半径恰好
  • Ansible 将多个异步任务注册到同一变量

    有没有办法将多个异步任务注册到同一个变量 例如 如果我有两个任务 每个任务都调用异步 shell 命令 name Run async task 1 shell echo task 1 async 30 poll 0 register db
  • 如何检测圆形视图内的触摸

    我有一个圆形的 UIView 我必须仅检测紫色圆圈内的触摸 所有在圆圈外的触摸 例如黑色方块和白色背景必须被忽略 设置半径和检测触摸将没有任何用处 因为当多个视图使用不同的控制器彼此重叠时 将很难管理 有什么办法吗 我可以做到这一点 请您给
  • 无法在 iOS 应用程序中使用自定义字体

    我正在尝试为我的 iOS 应用程序使用自定义字体 这就是我所做的 我将自定义字体 m tff 添加到 Xcode 支持文件目录 此外 我还在 myApp plist 中创建了应用程序提供的名为 Fonts 的条目 其中包含字体的值名称 m
  • 如何在 .NET 中将 HTML 转换为 RTF(富文本)而无需支付组件费用? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有免费的第三方或 NET 类可以将 HTML 转换为 RTF 用于支持富文本的 Windows 窗体控件 免费 要求来自这样一个事实 我只在开发
  • 动态添加节点到 d3.js 力向图

    我在动态添加节点到 d3 js 强制定向图时遇到问题 我想知道这里是否有人可以阐明这个主题 我遇到的问题是我希望刻度函数进行转换all图上的节点而不仅仅是新添加的节点 以下是我用于添加节点和处理转换的函数 Function to handl
  • Google App Engine“没有名为请求的模块”PyDev

    我下载并安装了requestsPython 2 7 的库 使用 shell 我可以发出 导入请求 并实际使用它 不会出现任何问题 问题是 运行 Google App Engine 时找不到它并提示错误 导入错误 没有名为请求的模块 我使用
  • Swing JTabbedPane 在填充时抛出 IndexOutOfBoundsException

    我有一个包含多个组件的应用程序 其中之一是JTabbedPane里面还有其他东西 显然 我访问此窗格only通过这个吸气剂 public JTabbedPane getPlotTabbedPane if plotTabs null plot
  • Gulp、html 模板和片段加载

    当我通过 gulp 任务运行生成的 html 文件时 我想在生成的 html 文件中的各个位置导入 html 片段 以下是我的 gulp 任务 gulp task build html function gulp src resources
  • protobuf-net 使用 DynamicType 序列化 System.Object 会引发异常

    在我的应用程序中 我正在序列化消息以使用 protobuf net 通过网络发送 每条消息都有一个用于标头信息的键值对列表 但是 我遇到了一个异常 并且我已经能够用一个非常简单的示例来重现它 TestFixture public class
  • LibGDX:粒子尺度

    在我的游戏中我使用 static final float FRUSTUM WIDTH 10 static final float FRUSTUM HEIGHT 15 所以当我绘制粒子时 它们占据了整个屏幕并且非常巨大 那么我如何缩小它们以满
  • Neo4j:使用可选关系实现软删除

    我正在尝试在 Neo4j 中实现软删除 从 Alice 的角度来看 Cypher 中描述的图是这样的 clyde User lt FOLLOWS alice User LIKES gt bob User 我没有实际删除节点及其关系 而是 更