Neo4j 无法匹配numeric上的WHERE子句-必须使用TOSTRING()进行转换
我有一个推特数据库 如果我返回一条Tweet,如下所示Neo4j 无法匹配numeric上的WHERE子句-必须使用TOSTRING()进行转换,neo4j,Neo4j,我有一个推特数据库 如果我返回一条Tweet,如下所示 MATCH (t:Tweet) WHERE ID(t) = 337314 RETURN TOSTRING(t.id), ID(t) AS id, t.text AS text 我得到: 657066610235154432 337314 THE WEEK THAT WAS Happenings in #climatechange #politics, #policy & #science for @climaterea
MATCH (t:Tweet) WHERE ID(t) = 337314 RETURN TOSTRING(t.id), ID(t) AS id, t.text AS text
我得到:
657066610235154432 337314 THE WEEK THAT WAS Happenings in #climatechange #politics, #policy & #science for @climaterealitya #reality Website: https://t.co/abnpfO4blb
如果我随后使用属性t.id匹配Tweet,则会失败:
MATCH (t:Tweet) WHERE t.id = 657066610235154432 RETURN TOSTRING(t.id), ID(t) AS id, t.text AS text, t.alpha_updated
返回-无行
如果我使用TOSTRING()将t.id转换为字符串,则返回节点:
MATCH (t:Tweet) WHERE TOSTRING(t.id) = '657066610235154432' RETURN TOSTRING(t.id), ID(t) AS id, t.text AS text
以下是neo4j中的屏幕截图:
这发生在一个数百万数据库中约6k条推文上。它们位于一个几乎连续的ID值块中,因此我怀疑在添加这些节点的特定时间内索引已损坏
如果您能帮助您理解和解决此问题,我们将不胜感激。您的数据库有时会为
id
属性存储字符串值
它包含两个具有id
属性的节点。一个节点使用字符串值,另一个节点使用整数。控制台显示一个TOSTRING()
查询匹配这两个节点
但是,如果使用此查询,将成功(仅)获取存储整数值的节点:
MATCH (t:Tweet)
WHERE t.id = 657066610235154432
RETURN t.id, ID(t) AS id, t.text AS text;
因此,您需要遍历数据库,将所有具有字符串值的属性重新设置为相应的整数值。这与json不支持64位整数有关,您需要将其转换为字符串。