随机想法
Neo4j Google Group上有一个关于如何在Cypher中以随机顺序返回结果的问题。
第一次尝试
最简单的办法就是按rand()排序
MATCH (n:Crew)
RETURN n
ORDER BY rand()
这会失败,并提示
ORDER BY expressions must be deterministic. For instance, you cannot use the rand() function in the expression
这是可以解释的,你如何按每次调用都生成新值的某个东西排序。
有效的查询
所以我们必须将随机值与每一行关联。幸运的是,使用WITH很容易做到这一点
MATCH (n:Crew)
WITH n, rand() AS r
ORDER BY r
RETURN n
所以WITH n, rand() as r为每一行添加了一个名为r的新列(我们需要别名),然后我们可以按该列排序作为with的一部分(我们甚至可以分页),但在RETURN子句中我们只返回n而不公开r。
如果您希望按以后不想公开的内容进行排序,此方法也很方便。
有用的概念
例如,按人员姓名排序,但按该顺序返回朋友
MATCH (n:Crew)-[:KNOWS]->(o)
WITH n.name as name, o
ORDER BY name DESC
RETURN o
此页面是否有帮助?