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 个单独的查询来做到这一点吗?
我是这样看的。
- 获取所有配置文件并为每一行创建一个随机数
- 将所有配置文件收集到配置文件列表中并按随机数 (r) 排序
- 计算配置文件列表大小的 50%
- 从 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
我想限制来自 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 个单独的查询来做到这一点吗?
我是这样看的。
- 获取所有配置文件并为每一行创建一个随机数
- 将所有配置文件收集到配置文件列表中并按随机数 (r) 排序
- 计算配置文件列表大小的 50%
- 从 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