Neo4j Cypher - 如何限制 50% 的 MATCH 结果

Neo4j Cypher - How to limit 50% of MATCH results

我想限制来自 MATCH 的结果的 50%,但看起来 LIMIT 不接受动态值。

我试过了:

MATCH (:Profile) 
WITH COUNT(*) AS c
MATCH (n:Profile)
WITH n ORDER BY rand() LIMIT toInt(c * 0.5) 
RETURN n

然后我得到错误:

It is not allowed to refer to variables in LIMIT

那么有什么方法可以不使用 2 个单独的查询来做到这一点吗?

我是这样看的。

  1. 获取所有配置文件并为每一行创建一个随机数
  2. 将所有配置文件收集到配置文件列表中并按随机数 (r) 排序
  3. 计算配置文件列表大小的 50%
  4. 从 start 到 cnt 展开列表,然后 return 每个节点
MATCH (n:Profile) 
WITH n, rand() as r ORDER by r 
WITH collect(n) as profile_lst
WITH profile_lst, toInt(size(profile_lst)/2) as cnt
UNWIND profile_lst[0..cnt] as prof
RETURN prof