Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j/Cypher-按不同的属性值返回节点_Neo4j_Cypher - Fatal编程技术网

Neo4j/Cypher-按不同的属性值返回节点

Neo4j/Cypher-按不同的属性值返回节点,neo4j,cypher,Neo4j,Cypher,想象一个充满个人数据的图表。每个节点都有一个名为“age”的属性。现在我想返回一个示例,其中包含的节点数量与“age”存在的不同值相同,因此,如果0到90之间的每个age都有一个节点,那么示例大小将为91 我如何通过cypher实现这一点 我实际上想做的是返回一定数量的随机元素,每个元素都有一个不同的“age”值,因此仅获取每个不同的属性值而不使用相应的节点是不够的。这可能适用于您: MATCH (p:Person) RETURN p.age AS age, COLLECT(p)[TOINT(r

想象一个充满个人数据的图表。每个节点都有一个名为“age”的属性。现在我想返回一个示例,其中包含的节点数量与“age”存在的不同值相同,因此,如果0到90之间的每个age都有一个节点,那么示例大小将为91

我如何通过cypher实现这一点


我实际上想做的是返回一定数量的随机元素,每个元素都有一个不同的“age”值,因此仅获取每个不同的属性值而不使用相应的节点是不够的。

这可能适用于您:

MATCH (p:Person)
RETURN p.age AS age, COLLECT(p)[TOINT(rand() * COUNT(p))] AS person;

该查询收集数据库中每个年龄段的所有人,并为每个年龄段随机挑选一个。

这可能适用于您:

MATCH (p:Person)
RETURN p.age AS age, COLLECT(p)[TOINT(rand() * COUNT(p))] AS person;

该查询将收集数据库中具有不同年龄的所有人员,并为每个年龄随机选取一个。

如果您拥有或可以获得更改图表的能力,您可能希望将个人的年龄提取到:年龄节点(这仅适用于数据中年龄是静态的)

APOC程序有一个可以帮助解决这一问题的方法

通过这种方式,您只需在所有节点上进行匹配即可获得每个年龄的人:年龄节点和

编辑

对于每个年龄段的随机选择,我们可以使用cybersam收集和获取随机索引的方法

对于APOC过程,我们还可以选择使用
APOC.coll.randomItem()
从集合中获取随机项。它基本上在引擎盖下做同样的事情

完整查询(假设您有不同的:Age节点(具有“Age”属性)以及与:Person节点的关系)如下所示:

MATCH (age:Age)<-[:HasAge]-(p:Person)
RETURN age.age as age, apoc.coll.randomItem(collect(p)) as randomPerson

如果您拥有或能够获得更改图形的能力,则可能需要将个人的年龄提取到:Age节点(这仅适用于数据中的年龄是静态的)

APOC程序有一个可以帮助解决这一问题的方法

通过这种方式,您只需在所有节点上进行匹配即可获得每个年龄的人:年龄节点和

编辑

对于每个年龄段的随机选择,我们可以使用cybersam收集和获取随机索引的方法

对于APOC过程,我们还可以选择使用
APOC.coll.randomItem()
从集合中获取随机项。它基本上在引擎盖下做同样的事情

完整查询(假设您有不同的:Age节点(具有“Age”属性)以及与:Person节点的关系)如下所示:

MATCH (age:Age)<-[:HasAge]-(p:Person)
RETURN age.age as age, apoc.coll.randomItem(collect(p)) as randomPerson

这是一个您必须支持的常见用例,还是一个一次性查询?您可能想考虑对模型进行更改,以便更好地支持这种类型的查询的快速执行,也就是数据中的年龄静态,或者是年龄与出生日期的绑定,所以随着时间的推移,年龄会增加,这是一个常见的用例,数据是静态的。我没有对数据库进行建模,因此更改数据组织将是一件非常困难的事情。这是一个您必须支持的常见用例,还是一个一次性查询?您可能想考虑对模型进行更改,以便更好地支持这种类型的查询的快速执行,也就是数据中的年龄静态,或者是年龄与出生日期的绑定,所以随着时间的推移,年龄会增加,这是一个常见的用例,数据是静态的。我没有对数据库建模,所以更改数据组织将是一个不错的建议。然而,这并不能保证结果是随机的。更新了我的答案,包括每个年龄的随机选择(每个人都有不同的年龄),以及从不同年龄的随机人中随机选择需要多少人。很好的建议。然而,这并不能保证结果是随机的。更新了我的答案,包括每个年龄的随机选择(每个人都有不同的年龄),以及从不同年龄的随机人中随机选择需要多少人。