从图表

时间:2015-09-01 01:00:36

标签: database neo4j cypher graph-databases

建立

我是图形数据库和neo4j / cypher的新手,我很难理解如何从结果中排除各个部分。下面是我的图表的图像。每个节点和每个关系都有activeFromactiveTo属性,以便我可以查看历史记录中任何给定点存在的图形。

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

graph visualization

(与日期的任何关系表明它已经或预定(未来日期)到期。没有日期或未来日期表示它已激活。)。

问题

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

我不理解的原因是:

  1. Region5Company1的关系仍然有效......为什么公司不出现? (不应该像第一张图片一样将0长度路径带回公司吗?)
  2. Office5Office27都有过期关系,为什么他们仍然在结果中?
  3. 办公室1,2,6,9和11是活动节点,但没有活动关系,为什么要返回? (我的GUESS在这里是我的第二个WHERE子句(分支过滤器)过滤掉了关系,但没有过滤掉他们关联的节点,但我不确定如何以不同的方式做到这一点。
  4. 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沙箱供你们玩,如果需要的话。 请用这个来成熟,因为我不知道如何让它只读。请不要删除数据并为其他人搞乱。我也亲自为这个云实例付费,所以请不要滥用虚拟机/资源:))

    您可以在此处访问它:(抱歉,出于安全考虑,已删除此问题已被解答)。

1 个答案:

答案 0 :(得分:3)

根据您的问题,我正在尝试拼凑您需要的内容,并且我了解您希望返回包含所有活动节点和关系的路径。这是因为您已经询问Office 27和Office 5都是活动节点,但它们与区域5的单一关系是不活动的,因此您不希望Office 27-&gt; Region 5和Office 5-&gt;之间的路径。 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,将ALL更改为ANY,您将在结果中看到这些,因为路径现在已部分激活。

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