我創建了 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;
MATCH (n:test)
WITH n, collect(n.name) as nodes
WITH n, apoc.coll.zip(nodes, range(0, size(nodes))) as pairs
RETURN pairs,n.name;
---------------------
| pairs | n.name |
---------------------
| [["a", 0]] | "a" |
| [["b", 0]] | "b" |
| [["c", 0]] | "c" |
---------------------
我希望結果與查詢完全相同:
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
MATCH (n:test)
WITH n, collect(n.name) as nodes
WITH n, apoc.coll.zip(nodes, range(0, size(nodes))) as pairs
UNWIND pairs as pair
RETURN pairs;
------------
| pairs |
------------
| [["a", 0]] |
| [["b", 0]] |
| [["c", 0]] |
------------
我希望結果與沒有UNWIND條款沒有什么不同:
--------------------------------
| pairs |
--------------------------------
| [["a", 0], ["b", 1], ["c", 2]] |
--------------------------------
3. UNWIND pairs as pair RETURN pair
MATCH (n:test)
WITH n, collect(n.name) as nodes
WITH n, apoc.coll.zip(nodes, range(0, size(nodes))) as pairs
UNWIND pairs as pair
RETURN pair;
----------
| pair |
----------
| ["a", 0] |
| ["b", 0] |
| ["c", 0] |
----------
我希望結果與簡單UNWIND的嵌套串列沒有什么不同:
UNWIND [["a", 0], ["b", 1], ["c", 2]] as list
RETURN list;
----------
| list |
----------
| ["a", 0] |
| ["b", 1] |
| ["c", 2] |
----------
你知道為什么會發生這些嗎?RETURN和UNWIND檔案中似乎沒有解釋它們。
uj5u.com熱心網友回復:
對于列出的所有 3 個查詢,關鍵點是,
...
WITH n, collect(n.name) as nodes
...
collect是一個聚合函式,它可以被分組。在WITH子句中指定 'n'會導致它執行類似于 SQL 分組的“分組依據”。因此,如果您有 3 個節點,則會得到 3 個結果。
您可以通過RETURNing 進行除錯WITH以查看每一步的結果,如下所示,
MATCH (n:test)
WITH n, collect(n.name) as nodes
RETURN n, nodes
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339099.html
標籤:数组 暗号 嵌套列表 neo4j-apoc 放松
上一篇:無法排序或列印出陣列
下一篇:為什么我要將陣列轉換為物件
