只有当集合中至少有两个元素时,才能执行查询。 在我目前的情况下,我根据属性匹配节点,然后我将它们放入集合中,之后我想在集合的大小大于2时执行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 :(得分: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
不执行任何操作。
答案 1 :(得分: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
...
在这种情况下,您不需要else cypher块,因此我们可以将其保留,尽管您需要传入参数以便在if查询块中使用。