我的用户可以将其可用性提供给其他用户进行预订,获得以下信息:
(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
但是显然,它不起作用,因为我只能通过一条路径。你有什么想法吗?
答案 0 :(得分:1)
只需这样做:
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
答案 1 :(得分:1)
使用值列表时,可以使用all()来确保谓词对列表中的所有值均成立。假设您将日期列表作为参数传递(假设$requiredDates
):
MATCH (u:User {id:$userId})
WHERE all(date in $requiredDates WHERE (u)-[:USER_AVAILABILITY]-(:Availability {Date:date}))
RETURN u