【问题标题】:Query only uses relations without a given property查询只使用没有给定属性的关系
【发布时间】:2014-06-23 14:35:57
【问题描述】:

cypher 是否有可能不使用基于属性的某些关系?

我们有一个新要求,即关系永远不应该被硬删除,但应该得到一个标志“deleted = true”,这样我们就可以对节点的关系进行审计跟踪。 (像 X 是 Y 的朋友,但有点复杂,适用于所有关系类型)

这在密码查询中只需使用 WHERE r.deleted = false 即可实现,但在遍历 4-5 种关系类型的更复杂的查询中,这可能会变得更加困难。

有没有一种简单的方法可以说 Neo4J 不应该使用任何将“已删除”属性设置为 true 的关系?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    不完全符合您的要求,但您也可以将关系类型从 SOMETHING 更改为 SOMETHING_DELETED。然后,当您指定遍历时,您可以跳过这些关系。

    【讨论】:

      【解决方案2】:

      确实,随着图形模型的发展,保持deleted 属性很快变得难以管理:该属性会渗透到您的每一个查询中。据我所知,Neo4j 没有提供任何帮助。

      但是,我在使用 albertoperdomo 的方法时取得了成功。一些细节在几个月前的a question I asked here 中。

      您想替换要软删除的节点的两件事:它们的标签(因此无法直接查找它们)和它们的关系(因此无法从其他节点访问它们)。就我而言,我只是在标签和关系类型前加上下划线 (_)。

      好处很明显:您现有的查询(可能!)是安全的,因为不再考虑软删除的节点(它们无法再访问,除非您明显省略关系类型,即(a)--(b)什么的)。

      我还认为这是实现软删除的最高效方式,因为您实际上是在截断图表的各个部分——而不是匹配某个属性(即使它已编入索引)。

      但是,有一个问题。没有通用的方法替换标签和关系。例如,您不能说出以下内容:

      match (:Person {id: 123})-[r]-()
      set type(r) = '_' + type(r);
      

      对于您拥有的每种类型的节点,您必须分别替换每个标签和关系。如果关系是可选的,事情也会变得棘手,因为很难在整个查询中“携带”初始节点(因此my initial question)。

      我解决这个问题的方法是将查询的不同部分与UNION 串在一起:

      MATCH (review:Review {Id: {id}})<-[wrote:WROTE_REVIEW]-(owner)
      DELETE wrote CREATE (review)<-[:_WROTE_REVIEW]-(owner)
      UNION
      MATCH (review:Review {Id: {id}})-[evaluates:EVALUATES]->(product)
      DELETE evaluates CREATE (review)-[:_EVALUATES]->(product)
      UNION
      ...
      UNION
      MATCH (review:Review {Id: {id}})
      REMOVE review:Review") SET review:_Review;
      

      是的,您在每个子查询中 MATCHing 同一个节点,但我认为如果您的属性被索引,则性能影响可以忽略不计,但主要是因为您创建/读取节点的频率远高于删除它们(否则,您的数据库将是空的!)

      【讨论】:

        【解决方案3】:

        这样查询

        (user)-[:friend {deleted: 'false'}]->(f)-[:works_in {deleted: 'false'} ]-(公司)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多