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编写一段短代码,遍历所有节点,并将相关属性转换为所需类型。