Neo4j 如果附加到节点集,则返回每个节点都具有特定值的节点
我有一些用户可以将其可用性交给其他用户预订,获得以下信息:Neo4j 如果附加到节点集,则返回每个节点都具有特定值的节点,neo4j,cypher,Neo4j,Cypher,我有一些用户可以将其可用性交给其他用户预订,获得以下信息: (u:User {Id = "1"})-[:USER_AVAILABILITY]->(a:Availability {Date = "2018-07-18", Booked = false}) 用户每天可以有一个节点可用,他说他是可用的。我想检查用户是否可用,例如:“2018-07-18”、“2018-07-19”、“2018-07-20”。因此,我需要检查用户是否拥有与节点日期值列表相关的所有节点。有可能吗 我使用的是neo4
(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
但很明显,它不起作用,因为我只能通过一条路径一次。你有什么想法吗?简单地说:
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
简单地说:
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
使用值列表时,可以使用all()确保谓词对列表中的所有值均为true。假设您将日期列表作为参数传递(例如,
$requiredDates
):
使用值列表时,可以使用all()确保谓词对列表中的所有值均为true。假设您将日期列表作为参数传递(例如,
$requiredDates
):
在这个例子中,id也应该是一个参数Thank man,工作得很好。为什么要将id作为参数?你的意思是为了查询重用,还是有什么我不知道的?当我在驱动程序中构建查询时,它会为我这样做,因此我不需要面对用例,但这是为了个人知识。是的,用于使用不同id为起始节点重用查询。在本例中,id也应该是一个参数Thank man,工作得很好。为什么要将id作为参数?你的意思是为了查询重用,还是有什么我不知道的?当我在驱动程序中构建查询时,它会为我做这件事,所以我不需要面对用例,但这是为了个人知识。是的,是为了使用不同的ID为起始节点重用查询。