基于关系属性进行过滤

时间:2016-01-18 17:34:33

标签: neo4j cypher

给出以下图表:http://console.neo4j.org/?id=qeuv73

我想设计一个密码查询,它将为“第一个用户”返回以下节点:

  • 节点7(“dep 2”)

条件是,为了返回节点,用户必须具有所有依赖关系。当用户与节点之间存在HAS关系时,用户拥有节点。 这很简单。以下查询应该可以解决这个问题:

MATCH (a:Dep)-[:REQUIRES]->(req:Dep)
WITH collect(req) AS requirements, a

MATCH (ub:Dep)<-[:HAS]-(:User)
WITH collect(ub) AS userDeps, requirements, a

WHERE ALL (req IN requirements WHERE req IN userDeps)
RETURN a

问题一开始,当我想引入另一个条件时,用户的HAS关系(数据属性)的值必须等于或大于特定依赖关系的数据。

将其放入示例中:“dep 2”满足两个条件,而“dep 1”不满足,因为它与“dep 4”有一个REQUIRES关系,data = 6,并且用户的HAS关系与节点等于5.然而,“dep 1”的其他依赖性已得到满足(因为级别是euqal)。

有人可以帮忙吗?

更新

换句话说,我想迭代每个节点Dep,检查每个节点的所有REQUIRES关系,然后返回已解决特定用户所有要求的所有节点。已解决意味着用户与每个需求都有HAS关系,并且HAS.data&gt; = REQUIRES.data

1 个答案:

答案 0 :(得分:0)

仅供将来参考。 如果你有一个似乎太复杂的任务,无法通过一个(或实际上是组合的)cypher查询处理,你可以扩展Neo4J功能。

您可以编写自己的模块并使用Neo4J进行部署。其中一种方法是使用GraphAware Runtime。 https://github.com/graphaware/neo4j-framework/tree/master/runtime