比较可以是时间戳或FALSE的属性

时间:2015-11-21 21:26:50

标签: neo4j cypher

当用户仍处于活动状态时具有FALSE的属性,或者当用户离开时具有时间戳我希望捕获在时间窗期间存在的用户的属性。我知道Cypher没有日期比较要求例如因为BETWEEN(月/年)和(月/年)所以我把时间戳放在属性上。

我尝试通过此查询获取用户:

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

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

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

我希望它接受布尔值或整数,但它似乎检查两个条件并且在将布尔值与长整数进行比较时失败 - 这很好。

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

谢谢, Balael

1 个答案:

答案 0 :(得分: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