Neo4j 基于关系属性的过滤
如下图所示: 我想设计一个密码查询,它将为“第一个用户”返回以下节点:Neo4j 基于关系属性的过滤,neo4j,cypher,Neo4j,Cypher,如下图所示: 我想设计一个密码查询,它将为“第一个用户”返回以下节点: 节点7(“dep 2”) 条件是,为了返回节点,用户必须拥有它的所有依赖项。当用户和节点之间存在HAS关系时,用户拥有节点。 这很简单。下面的查询应该可以做到这一点: MATCH (a:Dep)-[:REQUIRES]->(req:Dep) WITH collect(req) AS requirements, a MATCH (ub:Dep)<-[:HAS]-(:User) WITH collect(ub)
- 节点7(“dep 2”)
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
MATCH(a:Dep)-[:REQUIRES]->(req:Dep)
以collect(req)作为要求
匹配(ub:Dep)仅供将来参考。
如果您有一个任务似乎太复杂,无法通过一个(或实际上是组合的)密码查询来处理,那么您可以扩展Neo4J功能
您可以编写自己的模块并使用Neo4J进行部署。其中一种方法是使用GraphAware运行时。
依赖项是否级联到多个级别?是否在所有关系上都有数据
属性?是否有.data
必须=
单个需要。data
还是必须=
所有相关需要的总和。data
?@FrobberOfBits不,它们不会级联到多个级别。所有关系都有一个数据项目。也不它必须>=符合所有相应的要求。如:dep1->requires(数据:5)dep2 dep1->required(数据:6)dep3中所示,要匹配用户,必须使dep2至少具有数据5,而dep3至少具有数据6@FrobberOfBits实际上是的,它们可以级联到多个级别。但在这个用例中,这并不重要。