返回节点(如果附加到节点集,每个节点具有特定值)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回节点(如果附加到节点集,每个节点具有特定值)相关的知识,希望对你有一定的参考价值。
我有用户可以将其可用性由其他用户预订,获得以下内容:
(u:User {Id = "1"})-[:USER_AVAILABILITY]->(a:Availability {Date = "2018-07-18", Booked = false})
用户可以在他说可用的每一天获得一个节点可用性。我想检查用户是否可用,例如:“2018-07-18”,“2018-07-19”,“2018-07-20”。所以我需要检查用户是否有与节点日期值列表相关的所有节点。有可能吗?
我正在使用neo4j的3.2.5版本。
我尝试了以下查询:
MATCH (u:User) WHERE u.Id = '1'
MATCH (u)-[:USER_AVAILABILITY]-(a:Availability)
WHERE a.Date = '2018-07-18'
MATCH (u)-[:USER_AVAILABILITY]-(a2:Availability)
WHERE a2.Date = '2018-07-19'
MATCH (u)-[:USER_AVAILABILITY]-(a3:Availability)
WHERE a3.Date = '2018-07-20'
RETURN u
但显然,它不起作用,因为我只能通过一次路径。你有什么想法?
答案
使用值列表时,可以使用all()来确保谓词对于列表中的所有值都成立。假设您将日期列表作为参数传递(假设为$requiredDates
):
MATCH (u:User {id:$userId})
WHERE all(date in $requiredDates WHERE (u)-[:USER_AVAILABILITY]-(:Availability {Date:date}))
RETURN u
另一答案
只需这样做:
MATCH (u:User {id:'1'}),
(u)-[:USER_AVAILABILITY]-(a:Availability),
(u)-[:USER_AVAILABILITY]-(a2:Availability),
(u)-[:USER_AVAILABILITY]-(a3:Availability)
WHERE a.Date = '2018-07-18' AND
a2.Date = '2018-07-19' AND
a3.Date = '2018-07-20'
RETURN u
以上是关于返回节点(如果附加到节点集,每个节点具有特定值)的主要内容,如果未能解决你的问题,请参考以下文章