如何在Cypher中输出rand()函数生成结果并复用该值?
在Cypher中生成随机限制数并查看其值
你原本的Cypher代码通过随机数动态控制返回结果的数量:
MATCH (:City {name: 'London'})-[road:Road]->(city:City) WHERE NOT city.name IN ['Islington', 'Wembley'] RETURN city.name ORDER BY road.length ASC LIMIT 1 + toInteger(7*rand());
要同时查看toInteger(7*rand())生成的具体数值,只需用WITH子句提前定义变量,把随机数计算逻辑抽离出来,既可以在LIMIT中复用变量,也能在RETURN里输出它。
方案一:每行结果附带随机数
这种方式会在每条返回的城市名称旁显示对应的随机数:
WITH toInteger(7*rand()) AS luckyNumber MATCH (:City {name: 'London'})-[road:Road]->(city:City) WHERE NOT city.name IN ['Islington', 'Wembley'] RETURN city.name, luckyNumber ORDER BY road.length ASC LIMIT 1 + luckyNumber;
方案二:聚合结果,随机数只显示一次
如果希望随机数仅展示一次,同时返回符合数量限制的城市列表,可以用COLLECT聚合结果:
WITH toInteger(7*rand()) AS luckyNumber MATCH (:City {name: 'London'})-[road:Road]->(city:City) WHERE NOT city.name IN ['Islington', 'Wembley'] WITH luckyNumber, COLLECT(city.name)[0..(1 + luckyNumber)] AS cityNames ORDER BY road.length ASC RETURN luckyNumber, cityNames;
两种方案都能保证LIMIT使用的随机数和你查看的数值完全一致,满足伪代码里的变量存储与输出需求。
内容的提问来源于stack exchange,提问作者Juliette Gia
相关产品推荐
相关产品推荐

