2014-01-15 4 views
11

Product 노드에 quantity 속성이 있고 모든 노드에 quantity = 20 ...을 부여하는 사이퍼 쿼리를 사용하려고합니다. 문제는 해당 수량이 neo4j에 문자열로 저장된다는 것입니다. 사이퍼 쿼리에서 속성을 정수로 변환 할 수있는 방법이 있습니까?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; 

PS :이 우리가 정말 제품과 수량을 가지고 있지 않지만 단지 문자열로 저장 정수 값이 기존 neo4j 데이터에 직면하고 있으며, 우리가 어떤 경기를하고 싶으면, 정말 간단 유스 케이스입니다 이 문자열에

답변

9

다른 방법으로도 할 수 있습니다.

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

도 params와 함께 사용해야합니다.

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

또는 인라인 속성

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

아직도 정수로 변환 할 방법이 없습니까? –

+2

아, 여기 있습니다 : http://docs.neo4j.org/chunked/stable/query-functions-scalar.html#functions-toint –

+0

'str'이 'toString'으로 이름이 바뀐 것 같은데 [ 관련 현재 (3.x) 문서] (http://neo4j.com/docs/developer-manual/current/#functions-tostring). –

0

나는 너무 일찍이 문제에 직면했습니다. 내가 아는 한, 사이퍼에서 그 변환을 직접 할 수는 없습니다. 작은 Java 스크립트 (표준 Java API 사용)를 사용하여 저장된 값의 데이터 유형을 변경했습니다. 이것은 몇 달 전이지만 2.0 버전으로 변경되었을 수도 있습니다.

+0

은 ... 내가 발견되지 않은 모든 항목과 일치 설명서에서 tho. – ChrisR

7
MATCH (p:Product) WHERE toInt(p.quantity) = 20; 
예, 구글 그룹 토론을 본 적이 있지만 neo4j 2.0에서 변경 한 뭔가를 기대했다
+1

당신이하고있는 일을 설명하기 위해 답안에 텍스트를 넣는 것이 좋습니다. [좋은 대답 작성 방법] (http://stackoverflow.com/help/how-to-answer)을 읽으십시오. – jurgemaister