如何在neo4j中删除软件功能?

时间:2014-04-28 07:35:07

标签: neo4j soft-delete neo4jphp neo4j-node

在像mysql这样的关系数据库中,我习惯通过设置 deleted_at 进行软删除。然后检索 SELECT只获取行WHERE deleted_at IS NULL

我很困惑如何在neo4j数据库中实现软删除。我有多种方法,但不确定哪种方法或组合会有更多优势。

我也读过Neo4j: implementing soft delete with optional relationships但没有帮助。

  1. 只需设置节点 deleted_at 的属性。
  2. 删除节点标签并按前缀“_”更改,如“Student”将变为“_Student”
  3. 删除关系并按前缀“_”更改,如“TEACHES”将变为“_TEACHES”
  4. 哪种方式或组合或其他方式在neo4j中实现软删除?

2 个答案:

答案 0 :(得分:4)

哪种方式最好的方式是值得商榷的。如果您不需要软删除的实际日期,则可以根据需要应用/删除标签:

标记为“软删除”:

match (a {name: "foo"}) set a:deleted return a;

取消标记:

match (a {name: "foo"}) remove a:deleted return a;

如果需要断言关于软删除的属性,则将其建模为节点(例如“软删除事件”)然后通过关系将其链接到节点是有意义的。然后,被删除的节点是具有“删除”关系的特定类型的任何节点,该关系将转到软删除节点。然后,该软删除节点将具有deleted_at属性,以及有关您正在建模的删除事件的任何其他内容。

我不认为节点中的简单deleted_at属性与解决方案一样好,因为它会将节点信息与删除事件的信息混淆。我认为你试图在这里建模删除事件。

答案 1 :(得分:1)

我认为节点有deleted_at属性。您可以在其中存储已删除的时间戳。

在获取节点信息时,您可以检查deleted_at IS NULL。 喜欢 -

  MATCH (n:node)
  WHERE n.deleted_at IS NULL
  RETURN n;

存储删除节点时可以获得的时间戳。

您还可以在删除节点的用户之间建立关系deleted_by。这样你就可以找出谁删除了节点。