javascript - Neo4j 仅当 where 子句始终为真时才返回 Node

标签 javascript node.js neo4j cypher nodes

考虑以下 Neo4j 数据库示例:

Node 是(Basket)(Booking)和[:IS_BOOKED_IN]

现在 Booking 看起来像这样:Booking {start: number, end: number}

如果您预订某样东西,您可以选择使用哪个购物篮进行预订,然后在这两者之间创建关系 [:IS_BOOKED_IN]。

这工作得很好。

现在我想检查我的下一次预订是否有任何篮子在我选择的时间范围内可用。

现在我正在 Cypher 中使用以下查询执行此操作:

MATCH (basket:Basket)-[:IS_BOOKED_IN]->(booking:Booking) WHERE ({start} < booking.start AND {end} < booking.start) OR ({end} > booking.end AND {start} > booking.end) RETURN basket

{start} 和 {end} 是数字

如您所见,这将按预期工作,但前提是只有一个预订。一旦有更多的预订,我就会得到相同的篮子,即使它显然不可用,从而使我的查询无用。

发生这种情况是因为查询不会在 WHERE 子句失败时停止,而是再次采用相同的篮子 Node 并检查其他预订,这些预订不会失败,然后将篮子还给我。

我该如何更改它,如果 WHERE 子句始终为真,我如何告诉 Neo4j 只将篮子还给我?或者如果只失败一次就跳过篮子..

任何想法表示赞赏,谢谢

最佳答案

您可以使用集合,即 collect 然后是 ALL 谓词。

MATCH (basket:Basket)-[:IS_BOOKED_IN]->(booking:Booking) 
WITH basket, collect(booking) as bookings
WHERE ALL(booking in bookings WHERE
       ({start} < booking.start AND {end} < booking.start) 
    OR ({end} > booking.end AND {start} > booking.end))
RETURN basket

关于javascript - Neo4j 仅当 where 子句始终为真时才返回 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297585/

相关文章:

groovy - neo4j通过groovy连接

javascript - 如何使用 bolt 协议(protocol)(javascript)将对象数组(批量插入)插入到 neo4j 中

javascript - jQuery:当 onkeyup 工作时,onclick 事件不工作

javascript - 如何获取属性类型及其值

javascript - 在另一个 Promise 的回调中捕获 Promise 错误

php - 如何使用 Redis 在 NodeJs 和 PHP 之间共享 session ?

java - Neo4j 导出和导入数据

Javascript - 在循环中获取按键

javascript - 在node js中过滤的json字符串

javascript - Mongoose(或 MongoDB)中的 TransientTransactionError 是什么?