【问题标题】:Compare property that can be a timestamp or FALSE比较可以是时间戳或 FALSE 的属性
【发布时间】:2015-11-21 21:26:50
【问题描述】:

在用户仍处于活动状态时具有 FALSE 属性或在用户离开时具有时间戳我想捕获在时间窗口中存在的用户。我知道 Cypher 没有日期比较要问,例如对于 BETWEEN (month/year) AND (month/year) 所以我把时间戳放在属性上。

我试图通过这个查询来获取用户:

MATCH (u:User) WHERE u.end_date IS FALSE OR u.end_date > 1422658800 RETURN u

这应该返回所有仍处于活动状态的用户 (end_date = FALSE),或者如果 end_date 超出当前时间戳(此处为 1422658800)。

不幸的是,我坚持 NEO4J 声称:不知道如何比较。左:假(布尔);右:1422658800(长)

我希望它要么接受布尔值要么接受整数,但是在比较布尔值和长整数时,它似乎同时检查了这两个条件并且失败了——这很好。

知道如何构建一个可以同时处理这两个条件的查询,以便过滤正确的用户吗?

谢谢, 巴莱尔

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    如果没有设置 end_date,我就不会存储它,只需删除该属性。

    那么你可以使用:

    MATCH (u:User) 
    WHERE coalesce(u.end_date,2^32) > 1422658800 
    RETURN u
    

    如果你想坚持你的模型,我不鼓励这样做。 你可以先把你的布尔值变成一个数字。

    MATCH (u:User) 
    WHERE (case u.end_date when false 2^32 else n.foo end)
          > 1422658800 
    RETURN u
    

    【讨论】:

    • 感谢您的反馈,我会更改模型,这样更容易:)
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 2016-07-26
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多