知识库

比较路径中的关系属性

你想比较路径的关系属性,可以使用全局值或参数进行比较,也可以在路径内部相互比较。

基本模型
(:Person {person_id:'123'})-[:FRIEND {date:'1972-01-01'}]->(m:Person {person_id:'456'})

确保在你的节点上有一个约束或索引

约束
CREATE CONSTRAINT ON (p:Person) ASSERT p.person_id IS UNIQUE
索引
CREATE INDEX ON :Person(person_id);

如果你的时间格式为 yyyy-mm-dd,可以直接比较:(使用两位数字,例如 01),即 '2012-01-10' > '2011-08-31' )

WITH '1962-01-01' AS maxdate
MATCH (n:Person)-[f1:FRIEND]-()-[f2:FRIEND]-(m:Person)
WHERE n.person_id='180' AND f1.date < maxdate AND f2.date < maxdate
RETURN m;

你也可以使用简写形式:(n:Person {person_id:'180'})

如果你想在路径中针对关系使用通用表达式,可以在可变长度路径模式中使用变量 rels(它将是一个集合)

WITH '1962-01-01' AS maxdate
MATCH (n:Person {person_id:'180'})-[rels:FRIEND*2]-(m:Person)
WHERE ALL(r IN rels WHERE r.date < maxdate)
RETURN m;

你也可以使用 rels(path) 函数。

WITH '1962-01-01' AS maxdate
MATCH path = (n:Person {person_id:'180'})-[:FRIEND*2]-(m:Person)
WHERE ALL(r in rels(path) WHERE r.date < maxdate)
RETURN m;

或者当路径中的关系彼此有关联时

WITH '1962-01-01' AS maxdate
MATCH (n:Person  {person_id:'180'})-[rels:FRIEND*2]-(m:Person)
WHERE ALL(idx in range(0, size(rels)-2) WHERE (rels[idx]).date < maxdate AND (rels[idx]).date < (rels[idx+1]).date)
RETURN m;

原始问题来自 StackOverflow

© . This site is unofficial and not affiliated with Neo4j, Inc.