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

Unix 如何在cypher查询中检查节点值的数据类型?,unix,neo4j,cypher,Unix,Neo4j,Cypher,我有一个图形数据库,它是事件和与会者的集合 我将事件的start\u time属性存储为unix timestamp,这样只需比较unix timestamp就可以更轻松地搜索即将发生的事件 现在的问题是,我错误地将日期字符串存储为少数事件中的start\u time值,现在我无法将日期字符串与unix timestamp进行比较,这就是为什么查询不返回任何事件 在比较开始时间属性的值之前,如何比较其数据类型 请指导我实现目标的正确方法。您可以使用toInt函数隐式检查属性类型,并与值进行比较。

我有一个图形数据库,它是事件和与会者的集合

我将事件的
start\u time
属性存储为
unix timestamp
,这样只需比较
unix timestamp
就可以更轻松地搜索即将发生的事件

现在的问题是,我错误地将日期字符串存储为少数事件中的
start\u time
值,现在我无法将日期字符串与
unix timestamp
进行比较,这就是为什么查询不返回任何事件

在比较开始时间属性的值之前,如何比较其数据类型


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

您可以使用
toInt
函数隐式检查属性类型,并与值进行比较。要将所有字符串样式
start\u time
转换为其数值变量,请执行以下操作:

MATCH (n)
WHERE has(n.start_time) and (toInt(n.start_time)<>n.start_time)
SET n.start_time = toInt(n.start_time)
匹配(n)
其中有(n.开始时间)和(toInt(n.开始时间)n.开始时间)
设置n.start\u time=toInt(n.start\u time)

如果有很多节点,请使用
跳过
限制
对合理的批次进行处理。

我不知道这是否有效,但您能否将该值与str函数中包装的值进行比较?如果字符串属性的格式类似于unix时间戳,则可能不起作用,但值得一试


匹配(e:Event),其中e.start_date=str({e.start_date})返回e

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

“START attendee=node:attendee('user_id:100001195447969')匹配(attendee)-[:friends_with]-(friend)-[:Attenting]-(event)with event,attendee作为用户,count(distinct friend.user_id)作为计数,其中替换(str(event.START_time),“-”)=str(event.START_time)和count>=1返回事件。START_time;”


所以现在它没有给我像“2014-06-05 10:00:00”这样的开始时间。我可以比较其他活动的开始时间

“(toInt(n.开始时间)n.开始时间)”条件不起作用。这是我的查询:“START event=node:event('id:')匹配其中的事件(toInt(event.START_time)event.START_time)和event.START_time>=1402702785返回事件限制5;”
toInt
已添加到Neo4j 2.1.x中。如果不选择升级,则可以使用GlobalGraphOperations.getAllNodes编写一段短代码,遍历所有节点,并将相关属性转换为所需类型。