通过不同的关系查找与任何其他节点无关的所有相关节点

时间:2014-01-02 07:37:23

标签: neo4j

我正在尝试查找与任何其他项目无关的项目(通过found_for关系)的所有相关节点(通过found_for_term关系) -

START n=node(8402) MATCH n<-[:friend]-(m) WHERE not(m-[:relative]->()) RETURN m.id;

这适用于1.9.2,但在1.8.1上抛出了“无效查询”错误。

我正在使用Heroku上的Neo4j Addon,它位于1.8.1(他们目前不打算升级到1.9.2)

你能帮助我重新考虑查询并解释为什么它在1.8.1上失败了吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

看起来WHERE NOT在1.8.1中的路径中不支持匿名节点。解决方法是:

START n=node(8402), x=node(*) 
MATCH n<-[:friend]-(m) 
WHERE not( (m)-->(x) ) 
RETURN m.id;

然而,当node(*)触及所有节点时,此查询将会很慢。

答案 1 :(得分:1)

或者使用具有选项关系的其他慢速选项:

START n=node(8402) 
MATCH n<-[:friend]-(m) 
WITH m
MATCH m-[r?:relative]->()
WHERE r IS NULL 
RETURN m.id;

更好的是,使用graphenedb升级到1.9或2.0。