返回节点(如果附加到节点集,每个节点具有特定值)

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

我有用户可以将其可用性由其他用户预订,获得以下内容:

(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

但显然,它不起作用,因为我只能通过一次路径。你有什么想法?

neo4j cypher
2个回答
1
投票

使用值列表时,可以使用all()来确保谓词对于列表中的所有值都成立。假设您将日期列表作为参数传递(假设为$requiredDates):

MATCH (u:User {id:$userId})
WHERE all(date in $requiredDates WHERE (u)-[:USER_AVAILABILITY]-(:Availability {Date:date}))
RETURN u

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
© www.soinside.com 2019 - 2024. All rights reserved.