当使用apoc.coll.zip()函数时,需要注意该函数是按照最短的列表长度进行压缩的,而不是按照最长列表的长度。这可能会导致一些奇怪的结果,例如丢失某些数据或创建空值。
以下是一个示例:
假设我们有两个列表,其中一个包含 3 个元素,另一个包含 2 个元素:
WITH [1, 2, 3] AS list1, [4, 5] AS list2
RETURN apoc.coll.zip(list1, list2) AS zipped;
此查询将返回:
[ [1, 4], [2, 5] ]
可以看到,结果列表只包含两个子列表,因为这是根据最短列表长度进行压缩的。如果要避免丢失元素,请使用apoc.coll.zipper()函数,如下所示:
WITH [1, 2, 3] AS list1, [4, 5] AS list2
RETURN apoc.coll.zipper(list1, list2) AS zipped;
此查询将返回:
[ [1, 4], [2, 5], [3, null] ]
可以看到,结果列表包含三个子列表,其中第三个子列表包含了一个空值,以保持与最长列表的长度一致。