Neo4J:为参数列表中的每个匹配项返回一个随机节点

时间:2018-11-17 16:39:58

标签: neo4j cypher

我正在尝试创建一个单一的Cypher查询,该查询将返回节点列表,其中列表中的每个项目都是MATCH查询中的随机节点。

例如,我有一个“基因”列表,这些列表“驻留”在(基因座)上。 我想为每个基因座位置[0、1、2、3 ...]获得一个随机的Gene节点,并将其作为列表返回。

我一直在尝试使用此查询,但是它只返回一个Gene结果,而不是Gene列表:

WITH [0,1,2] AS locus UNWIND locus as lp MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0}) WITH lp, g, rand() as r ORDER BY r LIMIT 1 WITH COLLECT(g) as gw, lp return lp, gw

我在收集UNWIND(最后一行的第二行)中每个循环的结果时遇到问题,它只返回一个结果,而不是3(因为我要求轨迹位置0、1和2)

1 个答案:

答案 0 :(得分:1)

由于限制切断了整个流,请使用集合:

WITH [0,1,2] AS locus
UNWIND locus AS lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0}) 
WITH lp, 
     g ORDER BY rand()
WITH lp, 
     collect(g)[0..1] AS g // take the first item in the collection
WITH collect(g) AS gw,
     lp
RETURN lp, 
       gw