2014-12-03 4 views
0

아마 바보 같은 질문이지만 수학 연산과 같은 쿼리 문자열을 갖는 것은 그것을 알아낼 질수 : 을 노드의 속성입니다 : 1-4567655neo4j :

내가 가정 쿼리가

MATCH (t:Ticket {number:"1-4567655"}) return t 

오류가 발생합니다. neo4j는 물론 일치하지 않는 1 빼기 4567655를 계산합니다. 그렇다면 그 속성을 어떻게 쿼리 할 수 ​​있습니까? 예를 들어 보았습니다.

MATCH (t:Ticket {number:toString(1-556264051)}) RETURN t 

그러나이 작업도 마찬가지입니다. 누구든지 이것을 검색하는 방법을 알고 있습니까?

감사합니다.

답변

3

이 쿼리 할 경우

MATCH (t:Ticket {number:"1-4567655"}) return t 

Neo4J 확실히 하지이 수학을 실제로 (당신이 수학을 한 경우에 당신이 얻을 줄 것입니다) 문자열 -4567654로 끝날 것이다. 아니요, 문자 그대로 "1-4567655"인 일반 문자열을 지정하고 있습니다. 따라서이 쿼리가 아무 것도 반환하지 않으면 그 번호를 가진 Ticket 노드가 없기 때문에 가장 가능성있는 이유가 될 수 있습니다.

Neo4j에서 간단한 수학을 할 수 있습니다. 쿼리 RETURN 10-2은 대답 8을 제공합니다. return 1-556264051;을 실행하면 -556264050이 표시됩니다. toString을 사용하면 문제가 해결됩니다. 다시 한번 말하지만, 데이터베이스에 실제로 그 값을 가진 숫자 속성을 가진 Ticket 노드가 누락되어 있다고 생각합니다.

number 속성이 문자열이 아닌 다른 유형 (Long 또는 Double) 일 수 있습니까? 당신이 그것을 일치하려고하면

create (t:Ticket {number: 1}); 

:

예를 들어, 내가 이런 짓을 MATCH (t:Ticket { number: "1" }) return t 당신은 아무것도 얻을 수 있습니다. 문자열 "1"과 숫자 1은 같은 것이 아니기 때문에

숫자가 아닌 문자열을 찾기 위해 검색어를 변경하려고하면 도움이 될 것입니다.

+0

굉장합니다. 내가 지식이 부족한 것 같아. 따옴표를 사용하지 않고 쿼리를 실행하면 티켓이 << MATCH (t : Ticket {number : 1-4567655}) RETURN t >>를 찾습니다. - 이제 작동합니다. 예 : 다른 속성을 쿼리하고 싶습니다. like 상태 나는 여전히 << MATCH (t : Ticket {status : "Closed"}) RETURN t >>와 같은 질의를 할 필요가있다. 숫자에 대한 속성이 어떻게 든 문자열이 아닌가? 그렇다면 이것을 피하기 위해이 프로퍼티를 생성하는 동안이 프로퍼티를 확실한 문자열로 정의하는 방법은 무엇입니까? set t.number = csvLine [1]을 사용합니다. 어쩌면 타입을 설정할 필요가 있을까요? 도움을 주셔서 감사합니다, 매우 감사드립니다. – user3003715

+0

CSV를 통해 가져올 때 문자열을 보장하려면 toString() 만 사용하십시오. – FrobberOfBits