我想找到没有关系的节点。所以我在寻找与当前节点实例有关系的节点时使用;
@Query(value = "start user=node({self}) match (user)<-[r:KNOWS]-(known) return known")
@Fetch
private Iterable<GraphUser> knowsMe;
但是当我试图找到不知道当前节点的节点时,我找到了一个解决方案,就像;
@Query(value = "start user=node({self}), doesNotKnowMe=node(*) where has(user.userId) and NOT((user)<-[:KNOWS]-(doesNotKnowMe)) return doesNotKnowMe")
@Fetch
private Iterable<GraphUser> doesNotKnowMe;
当我运行这个 neo4j 在线执行器时,它运行良好。(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:KNOWS] 这样的别名的关系([:KNOWS])。
例外:
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
子句中定义别名。MATCH
我们可以在子句中定义它,但我们也不能NOT
在匹配中使用运算符。
我如何NOT
在 match 中使用运算符,因为它可以在WHERE
. 或者有没有办法以spring-data-neo4j
某种方式修复异常。
谢谢你!