如何在cypher查询中检查节点值的数据类型?

时间:2014-06-13 05:22:07

标签: unix neo4j cypher

我有图形数据库,它是事件和参与者的集合。

我将事件的start_time属性存储为unix timestamp,以便通过比较unix timestamp更轻松地搜索即将发生的事件。

现在问题是错误的我在几个事件中将日期字符串存储为start_time值,现在我无法将日期字符串与unix timestamp进行比较,这就是为什么查询不返回任何事件。

如何在比较其值之前比较start_time属性的数据类型?

请指导我实现目标的正确方法..

2 个答案:

答案 0 :(得分:3)

您可以使用toInt函数隐式检查属性类型并与值进行比较。要将所有字符串样式start_time转换为其数字变体:

MATCH (n)
WHERE has(n.start_time) and (toInt(n.start_time)<>n.start_time)
SET n.start_time = toInt(n.start_time)

如果有很多节点使用SKIPLIMIT来处理合理的批次。

答案 1 :(得分:2)

这就是我解决这个问题的方法。

“START参加者=节点:与会者('user_id:100001195447969')MATCH(与会者) - [:friends_with] - (朋友) - [:出席] - (事件)WITH事件,与会者作为用户,计数(明确的朋友) .user_id)作为计数WHERE REPLACE(str(event.start_time),“ - ”,“”)= str(event.start_time) AND count&gt; = 1 RETURN event.start_time;“

所以现在它没有给我带有start_time的事件,比如“2014-06-05 10:00:00”。我可以比较其余事件的start_time。