我正在试图找出在返回主要项目集时查询其他可选关系的正确方法(或者如果有更多惯用的方法来完成同样的事情)。
我在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
在控制台中,这会给出一个空指针异常,但在我的服务器上,它似乎只返回包含标记和与之关联的内容的项目。实现这一目标的最佳方法是什么?
谢谢!
答案 0 :(得分: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
个节点上的名称类型(或者只是将name属性复制到tag_name
以及is_name
),那么这是可行的。但是,如果Item
没有标记,那么您将获得一个空列表,而不是NULL
。
编辑:
您可能尝试的另一种方法,虽然它在控制台上不起作用,但我不想启动新的数据库:
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