如何使用来自Neo4j的Cypher从不同的基数返回值创建项目列表?

时间:2016-07-15 07:31:09

标签: neo4j cypher

我想创建数据沿袭的表格格式列表,以便用户可以使用Excel过滤功能轻松识别DWH表中的源表和列。 但是以下Cypher代码不起作用。

MATCH(a:DB {TABLE:'CONT'})-[b:RELATED*1..3]->(c:DB)
WHERE ALL ( tmp IN b WHERE tmp.CLAUSE IN ['where','join','unknown'] ) 
RETURN a.table,a.column,b.clause,c.table,c.column
LIMIT 200

我收到了以下错误。

Type mismatch: expected Map, Node or Relationship but was Collection<Relationship> (line 3, column 25 (offset: 147))

&#34;返回a.table,a.column,b.clause,c.table,c.column&#34;

如果我只指定&#34;返回a,b,c&#34;,我得到以下内容。

a b c   
{"TABLE":"TXX","COLUMN":"CXX","DB":"DXX"}   [{"CLAUSE":"unknown"}]  {"TABLE":"TYYY","COLUMN":"CYYY","DB":"DYYY"}

但我想得到如下。

TABLE,COLUMN,DB,CLAUSE,TABLE,COLUMN,
"TXX","CXX","DXX","unknown","TYYY","CYYY","DYYY"

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

所以,因为你绑定的关系是一个1到3个实际关系的可变长度关系,当你引用b时,你会得到这些关系的集合,而不是单个关系。

您可以在输出中看到只使用a,b和c时,请注意未知子句周围的括号;该集合中最多可以有2个其他对象。对于某些数据,“RETURN a,b,c”可能如下所示:

{"TABLE":"TXX","COLUMN":"CXX","DB":"DXX"}   [{"CLAUSE":"unknown"}, {"CLAUSE":"join"}, {"CLAUSE":"where"}]  {"TABLE":"TYYY","COLUMN":"CYYY","DB":"DYYY"}

这就是为什么返回b.clause没有意义,因为你要求列表中的属性而不是某种对象。

你可以做一个UNWIND b作为somethingElse ...然后做一些Else.clause并让它工作。 UNWIND将某些内容列表更改为行,但请注意,如果存在多个:RELATED关系,则它们将与a和c一起显示在各自的行中。