数字上不能MATCH WHERE子句 - 必须转换为TOSTRING()

时间:2015-12-04 10:24:17

标签: neo4j

我有推文数据库。

如果我按如下方式返回推文

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来匹配推文,则失败:

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中的截图:http://www.screencast.com/t/EtMSlKdZPv

这种情况发生在数百万的数据库中大约6k的推文上。它们几乎是连续的ID值块,因此我怀疑在添加这些节点的某个时间段内有一个损坏的索引。

理解和解决这个问题的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的数据库有时会存储id属性的字符串值。

Here is a console包含2个具有id属性的节点。一个节点使用字符串值,另一个节点使用整数。控制台显示TOSTRING()查询与两个节点匹配。

但是,如果您使用此查询,您将成功获取(仅)存储整数值的节点:

MATCH (t:Tweet)
WHERE t.id = 657066610235154432
RETURN t.id, ID(t) AS id, t.text AS text;

因此,您需要浏览数据库并重新设置具有相应整数值的字符串值的所有属性。