想象一个填充了关于个人数据的图。每个节点都有一个名为“age”的属性。现在我想返回一个包含“年龄”不同值的节点样本,因此如果每个年龄在0到90之间的节点都有一个节点,则样本大小为91.Neo4j/Cypher - 通过不同的属性值返回节点
我该如何实现这一点通过密码?
我真正想要做的是恢复一定量的随机元素,每个元素与“年龄”的独特价值,因此只要获得每个不同的属性值没有相应的节点是不够的。
想象一个填充了关于个人数据的图。每个节点都有一个名为“age”的属性。现在我想返回一个包含“年龄”不同值的节点样本,因此如果每个年龄在0到90之间的节点都有一个节点,则样本大小为91.Neo4j/Cypher - 通过不同的属性值返回节点
我该如何实现这一点通过密码?
我真正想要做的是恢复一定量的随机元素,每个元素与“年龄”的独特价值,因此只要获得每个不同的属性值没有相应的节点是不够的。
这可能会为你工作:
MATCH (p:Person)
RETURN p.age AS age, COLLECT(p)[TOINT(rand() * COUNT(p))] AS person;
查询收集所有谁拥有在DB每个不同年龄的人,并挑选一个随机各年龄。
如果你拥有或能获得更改图形的能力,你可能要提取出个人的年龄到:年龄节点(这只能是因为年龄在您的数据是静态的)。
APOC程序有一个categorization refactoring procedure可以帮助在这里。
这种方式来获得一个人各年龄,你只是匹配所有上:年龄节点,get one connected node for each of them。
编辑
至于让每个年龄段随机的选择,我们可以使用收集和抓住一个随机指数cybersam的做法。
随着APOC程序,我们还可以选择使用apoc.coll.randomItem()
抓住从一个集合中的随机项目的选项。它基本上是在引擎盖下做同样的事情。
完整的查询(假设你有不同的:年龄节点(与同向关系“年龄”属性):个人节点)应该是这样的:
MATCH (age:Age)<-[:HasAge]-(p:Person)
RETURN age.age as age, apoc.coll.randomItem(collect(p)) as randomPerson
你提到需要“一定的随机元素数量“,每个元素都有不同的年龄,所以我们可以修改上面的查询来收集randomPersons-per-age,并使用apoc.coll.randomItems()
来获取您需要的很多随机条目。
MATCH (age:Age)<-[:HasAge]-(p:Person)
WITH age, apoc.coll.randomItem(collect(p)) as randomPerson
RETURN apoc.coll.randomItems(collect(randomPerson), {numberOfItemsDesired}) as randomPeople
不错的建议。但是,这不能保证随机结果。 – cybersam
是的。更新了我的答案,包括每个年龄段的随机选择(每个人都有不同的年龄),随机选择不同年龄的随机人员需要多少人。 – InverseFalcon
这是您必须支持的常见用例,还是只是一次性查询?您可能需要考虑对模型进行更改以更好地支持此类查询的快速执行 – InverseFalcon
数据中的年龄也是静态的,或者年龄与出生日期相关,所以年龄随着时间的推移而增加? – InverseFalcon
这是一个常见用例,数据是静态的。我没有建模数据库,所以改变数据组织将是。 – rinderwahn