根据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。
有什么想法吗?
谢谢。
您可以将属性以内嵌模式内联:
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