我创建了3个测试节点,它们的名称属性是"a", "b", "c",并使用apoc.coll.zip()
将两个列表组合在一起:
MATCH (n:test)
WITH collect(n.name) as nodes
WITH apoc.coll.zip(nodes, range(0, size(nodes))) as pairs
RETURN pairs;
+--------------------------------+
| pairs |
+--------------------------------+
| [["a", 0], ["b", 1], ["c", 2]] |
+--------------------------------+
结果是预期的。有趣的是,当我通过在RETURN
子句中添加另一列或通过UNWIND
对修改查询时。
RETURN pairs,n.name;
h1> 希望结果与查询完全相同:
MATCH (n:test)
WITH n, [["a", 0], ["b", 1], ["c", 2]] as nested
RETURN nested, n.name;
+---------------------––––––––––––––––––--+
| pairs | n.name |
+---------------------––––––––––––––––––--+
| [["a", 0], ["b", 1], ["c", 2]] | "a" |
| [["a", 0], ["b", 1], ["c", 2]] | "b" |
| [["a", 0], ["b", 1], ["c", 2]] | "c" |
+---------------------––––––––––––––––––--+
<标题>2。UNWIND pairs as pair RETURN pairs
h1> 希望结果与没有UNWIND
子句没有什么不同:
+--------------------------------+
| pairs |
+--------------------------------+
| [["a", 0], ["b", 1], ["c", 2]] |
+--------------------------------+
<标题>3。UNWIND pairs as pair RETURN pair
h1> 期望结果与简单地UNWIND
嵌套列表没有什么不同:
UNWIND [["a", 0], ["b", 1], ["c", 2]] as list
RETURN list;
+----------+
| list |
+----------+
| ["a", 0] |
| ["b", 1] |
| ["c", 2] |
+----------+
你知道为什么会这样吗?它们似乎没有在RETURN
和UNWIND
文档中解释。
对于列出的所有3个查询,关键点是,
...
WITH n, collect(n.name) as nodes
...
collect
是一个聚合函数,可以分组。在WITH
子句中指定'n'将导致它执行"group by"类似于SQL分组。因此,如果你有3个节点,你会得到3个结果。
您可以在WITH
之后通过RETURN
来调试,以查看每个步骤的结果。一样,
MATCH (n:test)
WITH n, collect(n.name) as nodes
RETURN n, nodes