Neo4J Cypher数据类型转换

14

我在我们的Product节点上有一个属性quantity,希望进行一次Cypher查询,以便给我所有具有quantity = 20的节点...问题是数量在neo4j中存储为字符串。是否有一种方法在Cypher查询中将属性转换为整数?

// This fails to find the required nodes
MATCH (p:Product) WHERE p.quantity = 20;

// This finds them
MATCH (p:Product) WHERE p.quantity = "20";

// I would like to do this
MATCH (p:Product) WHERE INT(p.quantity) = 20;

提示:这只是一个非常简化的用例,我们实际上没有产品和数量,只是面对现有的neo4j数据,该数据将整数值存储为字符串,并且我们想要在这些字符串上进行一些匹配。

4个回答

12

你也可以反过来做。

MATCH (p:Product) WHERE p.quantity = str(20) RETURN p;

应该也可以使用参数运作。

MATCH (p:Product) WHERE p.quantity = str({quantity}) RETURN p;

或者甚至使用内联属性匹配

MATCH (p:Product {quantity : str({quantity})}) RETURN p;

1
还是没有办法转换成整数吗? - Mihai Raulea
4
好的,这是链接:http://docs.neo4j.org/chunked/stable/query-functions-scalar.html#functions-toint - Mihai Raulea
1
看起来 str 可能已经被重命名为 toString,请参阅相关的当前(3.x)文档 - Tommy Stanton

9
MATCH (p:Product) WHERE toInt(p.quantity) = 20;

2
在你的回答中加入一些文字来解释你正在做什么总是一个好主意。阅读如何撰写一个好的答案 - Jørgen R
toInt 是我需要的函数。 - canbax
toInt已被弃用,请使用toInteger()。 - Playing With BI

0

我之前也遇到过这个问题。据我所知,在Cypher中直接进行此转换是不可能的。我使用了一个小的Java脚本(使用标准的Java API)来更改存储值的数据类型。不过,这已经是几个月前的事情了,所以在2.0版本中可能已经有所改变。


是的,我看过谷歌群组的讨论,但希望在neo4j 2.0中有所改变...尽管我在文档中没有找到任何东西。 - ChrisR

0

toInteger 对我很有用。

MATCH (p:Product) WHERE toInteger(p.quantity) = 20;

我正在使用neo4j版本 Version: 5.6.0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接