0

我试图弄清楚在返回一组主要项目时查询其他可选关系的正确方法是什么(或者是否有更惯用的方法来完成同样的事情)。

我在http://console.neo4j.org/?id=747b3x设置了一个示例。我有三个节点,其中一个有两个标签和一个 IS_A 东西。我想查询所有项目并返回项目本身以及任何相关的标签和事物。

我试图创建的结果集如下:

Item     Tags        IS
-------  ----------  --------
1        ['A', 'B']  null
2        null        null
3        null        'foo'

这是我的查询当前的样子:

MATCH (i:Item)
WHERE HAS(i.name)  // in reality, statements to narrow down i
WITH i
MATCH (i)-[?:HAS]->(t:Tag), (i)-[?:IS_A]->(s:Thing)
RETURN i.name AS item, COLLECT(t.name) AS tags, s.name AS is 

在控制台中,这给出了一个空指针异常,但在我的服务器上,它似乎只返回具有标签和与之关联的事物的项目。实现这一目标的最佳方法是什么?

谢谢!

4

1 回答 1

1
MATCH (i:Item) 
WITH i 
MATCH (i)-[?:HAS|:IS_A]->(n) 
RETURN i.name AS Item, COLLECT(n.tag_name) AS Tags, n.is_name AS IS

:HAS如果区分和节点上的名称类型是有意义的:IS_A(或者可能只是将名称属性复制到tag_nameas 中is_name),那么这是可行的。但是,如果 aItem没有标签,那么NULL您将得到一个空列表,而不是 a。

编辑:

您可能会尝试的另一种方法是:

MATCH (i:Item)
WITH i
MATCH (i)-[?:HAS]->(t:Tag)
RETURN i, t
MATCH (i)-[?:IS_A]->(s:Thing)
RETURN i.name as item, COLLECT(t.name) AS tags, s.name AS is
于 2013-08-29T23:34:21.977 回答