我选择软删除图表上的关系,但我希望我的节点具有特定类型的单个“活动”关系。我遇到了一个场景,其中我的一些节点最终让它们的所有关系都获得了
deleted_at
属性,并且我在隔离它们进行调查时遇到了麻烦。
更简单地说,我正在寻找具有特定关系的节点,但所有节点都在
deleted_at
上有时间戳,并且没有一个处于活动状态(缺少 returned_at 属性)
我能够解决我的问题,但不是以我引以为傲的方式:
MATCH (a:Actor)-[r:CURRENT_FILMING]->(m:Movie)
WITH collect(r.deleted_at) AS deleted, a, r
RETURN a.id, count(DISTINCT r) AS movie_count, size(collect(r.deleted_at)) AS deleted_count ORDER BY movie_count - deleted_count ASC;
出于某种原因,这个查询要求我保留
collect(r.deleted_at) AS deleted
,即使我没有使用它来返回所有关系,我不明白为什么。
我尝试使用谓词函数来解决这个问题,但它没有给我我想要的东西:
MATCH (a:Actor)
MATCH (a)-[r:CURRENT_FILMING]->(m:Movie)
WITH collect(r) AS projects
WHERE none(x in projects WHERE x.deleted_at IS NULL)
RETURN *;
这也不起作用:
MATCH (a:Actor)-[r:CURRENT_FILMING]->(m:Movie)
WITH collect(r.deleted_at) AS deleted, collect(r.created_at) AS created, c, r
RETURN c, size(created) AS project_count, size(deleted) AS deleted_count ORDER BY (project_count - deleted_count) ASC;
我在尝试收集演员的 ID 时也遇到了麻烦,最终不得不手动下载 CSV 格式的响应,并将 id 列和文本编辑到一个数组中,这样我就可以编写一个查询来修复它们.
MATCH (a:Actor)-[r:CURRENT_FILMING]->(m:Movie)
WHERE a.id IN ["actor_1", "actor_2"]
REMOVE r.deleted_at
RETURN *
我很乐意从中学习,并感谢您阅读本文。
仅查看所有没有未删除关系的演员的 ID:
MATCH (a:Actor)
WHERE NOT EXISTS {
MATCH (a)-[r:CURRENT_FILMING]->()
WHERE r.deleted_at IS NOT NULL
}
RETURN a.id AS id