如何从Cypher的相关节点收集属性列表?

时间:2016-12-23 15:53:31

标签: neo4j cypher

我的图表中有一堆Foo个对象,它们可能有0到n个相关的Bar个对象。 Bar个对象有一个我想要聚合的属性baz。以下是我的开始:

MATCH (f:Foo)--(b:Bar) RETURN f, COLLECT(b.baz)

我正在尝试获得如下所示的输出:

===============================
| f         | COLLECT(b.baz)  |
-------------------------------
| Node(1..) | ["1", "2", "3"] |
| Node(2..) | ["4", "5"]      |
===============================

相反,我得到的是这样的:

===============================
| f         | COLLECT(b.baz)  |
-------------------------------
| Node(1..) | ["1"]           |
| Node(1..) | ["2"]           |
| etc...                      |
===============================

有关我做错的任何见解?

1 个答案:

答案 0 :(得分:2)

您可以创建示例数据集吗? 对于此数据集,您的查询可以正常工作。

CREATE
  (n1:Foo {name: '1'}),
  (a:Bar {name: 'a', baz: 1}),
  (b:Bar {name: 'b', baz: 2}),
  (n1)-[:REL]->(a),
  (n1)-[:REL]->(b)

您的查询返回以下内容:

MATCH (f:Foo)--(b:Bar)
RETURN f, COLLECT(b.baz)

╒═════════╤══════════════╕
│f        │COLLECT(b.baz)│
╞═════════╪══════════════╡
│{name: 1}│[1, 2]        │
└─────────┴──────────────┘