관계에없는 노드를 찾고 싶습니다. 그래서 나는 현재 노드 인스턴스와의 관계에서 노드를 찾는 동안 사용했다.MATCH의 연산자가 없습니다.
@Query(value = "start user=node({self}) match (user)<-[r:KNOWS]-(known) return known")
@Fetch
private Iterable<GraphUser> knowsMe;
그러나 현재 노드를 모르는 노드를 찾으려고했을 때 해결책을 찾았습니다. 나는이 neo4j 온라인 실행기를 실행하면
@Query(value = "start user=node({self}), doesNotKnowMe=node(*) where has(user.userId) and NOT((user)<-[:KNOWS]-(doesNotKnowMe)) return doesNotKnowMe")
@Fetch
private Iterable<GraphUser> doesNotKnowMe;
, 그것은 잘 작동 (http://www.neo4j.org/learn/cypher) 내가 사이트에 사용 된 샘플은 같은 것입니다.;
START m=node:node_auto_index(id="603"), actor=node(*)
WHERE HAS (actor.name) AND NOT ((m)<-[:ACTS_IN]-(actor))
RETURN actor
참고 : 결과를 얻으려면 영화와 관련이없는 노드를 배치해야합니다. 끝나면 쿼리가 추가 된 레코드가됩니다.
spring-data-neo4j로 실행할 때 문제가 있습니다. 관계 ([: 지식])에 [r : 지식]과 같은 별칭이없는 것은 좋아하지 않습니다.
예외 :
Caused by: org.neo4j.graphdb.NotFoundException: '__type__' property not found for NodeImpl#0.
at org.neo4j.kernel.impl.core.Primitive.newPropertyNotFoundException(Primitive.java:184)
at org.neo4j.kernel.impl.core.Primitive.getProperty(Primitive.java:179)
at org.neo4j.kernel.impl.core.NodeImpl.getProperty(NodeImpl.java:52)
at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:155)
at org.springframework.data.neo4j.support.typerepresentation.AbstractIndexingTypeRepresentationStrategy.readAliasFrom
그러나 아시다시피, 우리는 WHERE
절에 allias를 정의 할 수 없습니다. MATCH
절에서 정의 할 수 있지만, 일치로도 NOT
연산자를 사용할 수 없습니다.
NOT
연산자는 WHERE
에서 사용할 수 있으므로 어떻게 사용해야합니까? 또는 어떻게 든 spring-data-neo4j
예외를 수정하는 방법이 있습니다.
감사합니다!