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

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

以上是关于返回节点(如果附加到节点集,每个节点具有特定值)的主要内容,如果未能解决你的问题,请参考以下文章

Xpath 获取父节点,其中子节点的两个属性具有特定值

根据节点值为networkx中的节点绘制不同的颜色

循环遍历节点并使用 XSLT 将值附加到字符串

XPath可以只返回具有X子节点的节点吗?

通过标签值连接来自不同节点的数据

使用 TSQL 从 XML 中删除具有特定值的节点