是否可以通过某些属性返回具有关系的节点?

问题描述 投票:0回答:1

根据Neo4J文档,我可以检查一下在使用此代码返回true / false的两个节点之间是否存在关系

MATCH (n) WHERE EXISTS (n.name) RETURN n.name AS name, EXISTS ((n)-[:MARRIED]->()) AS is_married

我想知道是否还可以按结婚日期(关系属性)进行匹配,以也返回true / false。

示例:

MATCH (n) WHERE EXISTS (n.name) RETURN n.name AS name, EXISTS ((n)-[:MARRIED]->()) WHERE married_date = '2020-03-20' AS is_married

如果实际上在日期上匹配关系,则返回true或false。

有什么想法吗?

谢谢。

neo4j cypher graph-databases
1个回答
1
投票

您可以将属性以内嵌模式内联:

MATCH (n)
WHERE EXISTS (n.name)
RETURN n.name AS name, EXISTS ((n)-[:MARRIED {married_date:'2020-03-20'}]->()) AS is_married

对于更复杂的过滤(对范围,前置/后缀或无法在模式本身内联捕获的任何其他内容进行过滤,我们需要查看其他选项。

也许最好的后备方法是predicate functions相对于pattern comprehension的使用。

模式理解为我们提供了将关系投影到列表中的能力,any()谓词功能可以检查是否存在适合复杂谓词的那些关系,例如:

MATCH (n)
WHERE EXISTS (n.name)
RETURN n.name AS name, any(rel in [(n)-[r:MARRIED]->() | r] WHERE rel.married_date STARTS WITH '2020-03') AS is_married_in_march_2020
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.