apoc.col .zip()的一些奇怪的结果



我创建了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对修改查询时。

<标题>1。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 pairsh1> 希望结果与没有UNWIND子句没有什么不同:
+--------------------------------+
| pairs                          |
+--------------------------------+
| [["a", 0], ["b", 1], ["c", 2]] |
+--------------------------------+
<标题>3。UNWIND pairs as pair RETURN pairh1> 期望结果与简单地UNWIND嵌套列表没有什么不同:
UNWIND [["a", 0], ["b", 1], ["c", 2]] as list 
RETURN list;
+----------+
| list     |
+----------+
| ["a", 0] |
| ["b", 1] |
| ["c", 2] |
+----------+

你知道为什么会这样吗?它们似乎没有在RETURNUNWIND文档中解释。

对于列出的所有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

最新更新