Neo4j 无法匹配numeric上的WHERE子句-必须使用TOSTRING()进行转换

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

我有一个推特数据库

如果我返回一条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 @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位整数有关,您需要将其转换为字符串。