UNWIND

UNWIND语句可以将列表拆分为单独的行,列表中的每个元素为一行。

UNWIND可以作为单独语句或语句中的子句使用。

语法

  1. UNWIND <list> AS <alias> <RETURN clause>;

拆分列表

  1. nebula> UNWIND [1,2,3] AS n RETURN n;
  2. +---+
  3. | n |
  4. +---+
  5. | 1 |
  6. | 2 |
  7. | 3 |
  8. +---+

返回去重列表

UNWIND语句中使用WITH DISTINCT可以将列表中的重复项忽略,返回去重后的结果。

示例1

  1. 拆分列表[1,1,2,2,3,3]
  2. 删除重复行。
  3. 排序行。
  4. 将行转换为列表。
  1. nebula> WITH [1,1,2,2,3,3] AS n \
  2. UNWIND n AS r \
  3. WITH DISTINCT r AS r \
  4. ORDER BY r \
  5. RETURN collect(r);
  6. +------------+
  7. | collect(r) |
  8. +------------+
  9. | [1, 2, 3] |
  10. +------------+

示例2

  1. 将匹配路径上的顶点输出到列表中。
  2. 拆分列表。
  3. 删除重复行。
  4. 将行转换为列表。
  1. nebula> MATCH p=(v:player{name:"Tim Duncan"})--(v2) \
  2. WITH nodes(p) AS n \
  3. UNWIND n AS r \
  4. WITH DISTINCT r AS r \
  5. RETURN collect(r);
  6. +----------------------------------------------------------------------------------------------------------------------+
  7. | collect(r) |
  8. +----------------------------------------------------------------------------------------------------------------------+
  9. | [("player100" :player{age: 42, name: "Tim Duncan"}), ("player101" :player{age: 36, name: "Tony Parker"}),
  10. ("team204" :team{name: "Spurs"}), ("player102" :player{age: 33, name: "LaMarcus Aldridge"}),
  11. ("player125" :player{age: 41, name: "Manu Ginobili"}), ("player104" :player{age: 32, name: "Marco Belinelli"}),
  12. ("player144" :player{age: 47, name: "Shaquile O'Neal"}), ("player105" :player{age: 31, name: "Danny Green"}),
  13. ("player113" :player{age: 29, name: "Dejounte Murray"}), ("player107" :player{age: 32, name: "Aron Baynes"}),
  14. ("player109" :player{age: 34, name: "Tiago Splitter"}), ("player108" :player{age: 36, name: "Boris Diaw"})] |
  15. +----------------------------------------------------------------------------------------------------------------------+

最后更新: October 27, 2021