database - 从图中排除节点时出现问题

标签 database neo4j cypher graph-databases

设置

我对图形数据库和 neo4j/cypher 非常陌生,我很难理解如何从结果中排除各种部分。下面是我的图表的图像。每个节点和每个关系都有一个 activeFromactiveTo 属性,使我能够查看历史上任何给定点存在的图表。

MATCH (:Collective:Company)<-[tree *0..4]-(downline:Collective) RETURN downline

graph visualization

(任何与日期的关系都表明它已经过期或计划( future 日期)过期。没有日期或 future 日期意味着它处于事件状态。)。


问题

我的最终目标是查看同一个图表,减去所有过期的节点和关系。现在,我正在尝试构建让我看到这一点的查询,但失败了:(

我不明白的是为什么:

  1. Region5Company1 的关系仍然有效...为什么公司没有出现? (0长度路径不应该像第一张图片中那样让公司回来吗?)
  2. Office5Office27 的关系都已过期,那么为什么它们仍然出现在结果中?
  3. 办事处 1、2、6、9 和 11 是事件节点,但没有事件关系,那么为什么会返回它们? (我的猜测是我的第二个 WHERE 子句(分支过滤器)正在过滤掉关系,但不是它们关联的节点,但我不知道如何以不同的方式做到这一点)

.

MATCH (:Collective:Company)<-[tree *0..4]-(downline:Collective)
WHERE
    // -- node(s) are active
    downline.activeFrom <= '2015-08-31 23:59:59'
    AND (downline.activeTo IS NULL OR downline.activeTo > '2015-08-31 23:59:59')
UNWIND tree AS branch
WITH branch, downline
WHERE
    // -- branch is active
    branch.activeFrom <= '2015-08-31 23:59:59'
    AND (branch.activeTo IS NULL OR branch.activeTo > '2015-08-31 23:59:59')
RETURN downline

enter image description here

奖金

我已经用这些数据设置了一个 Neo4j 沙箱,供大家在需要时使用。 请对此保持成熟,因为我不知道如何使其只读。请不要删除数据并给其他人带来麻烦。我也亲自为这个云实例付费,所以请不要滥用虚拟机/资源:)

您可以在此处访问它:(抱歉,出于安全目的,现已删除该问题)。

最佳答案

根据您的问题,我正在尝试拼凑您所需要的内容,并且我了解您希望返回包含所有事件节点和关系的路径。这是因为您询问了 Office 27 和 Office 5,它们都是事件节点,但它们与区域 5 的单一关系处于非事件状态,因此您不希望 Office 27->区域 5 和 Office 5->区域 5 之间的路径.

但是,Office 2 处于事件状态,并且它与区域 4 具有事件关系(也处于事件状态)。区域 4 与公司 1 具有非事件关系,因此,由于您预计结果中不会出现 Office 2,我假设这是因为它在整个路径中具有非事件关系?

如果是这种情况,这里的查询有望满足您的要求 -

MATCH p=(:Collective:Company)<-[tree*0..4]-(downline:Collective)
WHERE
  ALL(x in relationships(p) WHERE x.activeFrom <= '2015-08-31 23:59:59'
  AND (x.activeTo IS NULL OR x.activeTo > '2015-08-31 23:59:59'))
  AND ALL(x in nodes(p) WHERE x.activeFrom <= '2015-08-31 23:59:59'
  AND (x.activeTo IS NULL OR x.activeTo > '2015-08-31 23:59:59'))
RETURN p

这可确保路径中的每个关系和每个节点都处于事件状态。要恢复 Office 2,1,请将“全部”更改为“任意”,您将在结果中看到这些内容,因为该路径现在部分处于事件状态。

顺便说一句,您还可以将图表设置为 http://console.neo4j.org/?init=0并分享

关于database - 从图中排除节点时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322048/

相关文章:

database - 在数据库中实现 "template of something that users can join"解决方案的最佳实践

将sql文件导入phpmyadmin时mysql错误1064

neo4j - 组合多个密码匹配语句的结果

neo4j - 在 cypher 中将多个关系作为一个关系返回

csv - Neo4j 将数组元素扩展为单独的行

Neo4J - 扩展密码

database - 如何将站点范围的设置存储在数据库中?

java - Spring @Transactional 防止开启事务

java - 将 graphaware neo4j-reco 连接到独立的 neo4j 服务器

java - Neo4j:模式索引查找比遗留索引慢?