如何在AgensGraph中搜索没有传入edges/relations的节点?
How do I search for nodes without incoming edges/relations in AgensGraph?
我尝试了一堆密码查询,大部分来自 this question,但 none 有效。
例如:
postgres=# match (a)<-[r]-() where r is null return *;
a | r
---+---
(0 rows)
我最后试的是这个:
match (n) where not (n)<-[]-() return *
获取语法错误:
postgres=# match (n) where not (n)<-[]-() return *;
ERROR: syntax error at or near ")"
LINE 1: match (n) where not (n)<-[]-() return *;
我终于启动了 Neo4j,发现上面提到的密码查询在那里工作。
AgensGraph (2.1.3) Cypher 中的等价物是什么?
注意
在等待正确解决方案的同时,我通过以下查询序列解决了这个问题:
- 将所有具有传出关系的节点标记为children
match (a)<-[]-(b) SET b.child=true;
- 找到所有非子节点节点
match(a) where a.child is null return a;
- 删除 child 标记
match(a) where a.child is not null remove a.child;
最终包装在交易中,因此不会改变图形属性。
您的查询 match (n) where not (n)<-[]-() return *;
已关闭,但您需要再添加 2 个元素才能使查询正常工作。
- 您的模式 (n)<-[]-() 需要用括号括起来。
- 您需要在模式前加上 EXISTS
所以我 运行 这个查询:MATCH (a) WHERE NOT EXISTS ((a)<-[]-()) RETURN *;
它成功了。
我尝试了一堆密码查询,大部分来自 this question,但 none 有效。
例如:
postgres=# match (a)<-[r]-() where r is null return *;
a | r
---+---
(0 rows)
我最后试的是这个:
match (n) where not (n)<-[]-() return *
获取语法错误:
postgres=# match (n) where not (n)<-[]-() return *;
ERROR: syntax error at or near ")"
LINE 1: match (n) where not (n)<-[]-() return *;
我终于启动了 Neo4j,发现上面提到的密码查询在那里工作。
AgensGraph (2.1.3) Cypher 中的等价物是什么?
注意
在等待正确解决方案的同时,我通过以下查询序列解决了这个问题:
- 将所有具有传出关系的节点标记为children
match (a)<-[]-(b) SET b.child=true;
- 找到所有非子节点节点
match(a) where a.child is null return a;
- 删除 child 标记
match(a) where a.child is not null remove a.child;
最终包装在交易中,因此不会改变图形属性。
您的查询 match (n) where not (n)<-[]-() return *;
已关闭,但您需要再添加 2 个元素才能使查询正常工作。
- 您的模式 (n)<-[]-() 需要用括号括起来。
- 您需要在模式前加上 EXISTS
所以我 运行 这个查询:MATCH (a) WHERE NOT EXISTS ((a)<-[]-()) RETURN *;
它成功了。