Neo4j:条件返回/IF 子句/字符串操作

标签 neo4j cypher

这是 Neo4j: Listing node labels 的延续

我正在构造一个动态 MATCH 语句以返回层次结构并将输出用作 Neo4j JDBC 输入以从 java 方法查询数据:

MATCH p=(:Service)<-[*]-(:Anomaly)
WITH head(nodes(p)) AS Service, p, count(p) AS cnt
RETURN DISTINCT Service.company_id, Service.company_site_id,
"MATCH srvhier=(" +
   reduce(labels = "", n IN nodes(p) | labels + labels(n)[0] +  
    "<-[:BELONGS_TO]-") + ") WHERE Service.company_id = {1} AND
    Service.company_site_id = {2} AND Anomaly.name={3} RETURN " + 
    reduce(labels = "", n IN nodes(p) | labels + labels(n)[0] + ".name,");

输出如下:

MATCH srvhier=(Service<-[:BELONGS_TO]-Category<-[:BELONGS_TO]-SubService<-
[:BELONGS_TO]-Assets<-[:BELONGS_TO]-Anomaly<-[:BELONGS_TO]-) WHERE 
Service.company_id = {1} and Service.company_site_id = {21} and 
Anomaly.name={3} RETURN Service.name, Category.name, SubService.name, 
Assets.name, Anomaly.name,

我遇到的问题:

“BELONGS_TO”附加到我的最后一个节点

第 2 行: Assets <-[:BELONGS_TO]-异常**<-[:BELONGS_TO]-**

是否有可用于删除它的字符串函数(我看过 Substring..)?或者我可以使用带有条件 n=cnt 的 CASE 语句来附加“BELONGS_TO”吗?

我的最后一行仍然存在同样的问题:

第 5 行:Assets.name,Anomaly.name**,** - 我需要删除的附加“,”。

谢谢。

最佳答案

我认为您需要在 reduce 子句中引入一个 case 语句,类似于下面的代码片段。如果该节点不是集合的最后一个元素,则附加 "<-[:BELONGS_TO]-"关系。如果它是最后一个元素,则不要附加它。

...
reduce(labels = "", n IN nodes(p) | 
CASE
  WHEN n <> nodes(p)[length(nodes(p))-1] THEN
    labels + labels(n)[0] + "<-[:BELONGS_TO]-"
  ELSE
    labels + labels(n)[0]
  END
...

关于Neo4j:条件返回/IF 子句/字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28774460/

相关文章:

azure - 在Azure上安装Neo4j,无法浏览WebAdmin

java - Neo4j 返回问题 : How to map the properties of one node and one property from other node which connected into java object

neo4j - 在多个 Cypher 语句中创建多个节点和关系

neo4j - 密码查询 : Assigning an aggregate value as a property of a relationship

Neo4j Cypher查询生成器

neo4j - neo4j 密码

java - 在Java中嵌入的neo4j中加载csv文件

graph - 在 Neo4J 中为大图生成边的智能方法

java - Neo4j OGM @Properties 支持哪些条目类型?

java - Gephi + Neo4J 插件 + Mac (Java7)