2017-05-05 49 views
0

只有當集合中至少有兩個元素時纔有執行查詢的方法。 在我目前的情況下,我根據它們的屬性匹配節點,然後將它們放入集合中,之後當collection的大小大於2時,我想執行foreach語句。根據集合的大小執行foreach

這是我想執行的時候集合的大小大於兩個元素

WITH COLLECT(items) AS itemsCol 
FOREACH(i in RANGE(0, 1)| 
    FOREACH(newItem in [productsCol[0]] | 
    FOREACH(oldItem in [productsCol[1]] | 
     CREATE UNIQUE (oldItem)-[:SEEN]->(newItem)))) 
+0

在接下來的幾周內留意APOC程序的下一個版本,應該有一個有條件地執行密碼代碼的新程序,如if/else。 – InverseFalcon

回答

1

像這樣的東西應該工作我查詢的片段:

WITH 
    COLLECT(items) AS itemsCol, 
    (CASE WHEN COUNT(items) >= 2 THEN RANGE(0, 1) ELSE NULL END) AS todo 
FOREACH(i in todo | 
    FOREACH(newItem in [productsCol[0]] | 
    FOREACH(oldItem in [productsCol[1]] | 
     CREATE UNIQUE (oldItem)-[:SEEN]->(newItem)))) 

FOREACH做如果正在迭代的集合是NULL,則沒有任何結果。

0

APOC Procedures剛剛更新,支持條件密碼執行。您需要3.1.3.7或更高版本(如果使用Neo4j 3.1.x)或3.2.0.3或更高版本(如果使用Neo4j 3.2.x)。

您可以使用apoc.do.when(),因爲這是一個寫入數據庫的查詢。

喜歡的東西:

... 
WITH COLLECT(items) AS itemsCol 
CALL apoc.do.when(size(itemsCol) >= 2, ' 
FOREACH(i in RANGE(0, 1)| 
    FOREACH(newItem in [productsCol[0]] | 
    FOREACH(oldItem in [productsCol[1]] | 
     CREATE UNIQUE (oldItem)-[:SEEN]->(newItem))))', 
     '', {productsCol:productsCol}) YIELD value 
... 

在這種情況下你不需要的其他密碼分組,這樣我們就可以離開了這一點,但你需要在你的參數傳遞使用的,如果查詢中塊。