首页 > 解决方案 > Neo4J:为参数列表中的每个匹配项返回一个随机节点

问题描述

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

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

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

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)

标签: neo4jcypher

解决方案


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

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

推荐阅读