Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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中多个属性的计数_Neo4j_Cypher - Fatal编程技术网

获取neo4j中多个属性的计数

获取neo4j中多个属性的计数,neo4j,cypher,Neo4j,Cypher,我试图将2个密码组合成一个,以提高性能,但没有成功 我需要得到在同一个密码中每个密码唯一的多个属性的计数 例1: 例2: Match (n) RETURN n.bar, count(*) AS count 我希望我可以同时运行这两个: Match (n) RETURN n.foo, count(*) AS fooCount, n.bar, count(*) AS barCount 但这会返回相同的计数,因为它会找到两者匹配的位置。不是我想要的 因此,我们正在寻找一种方法,将其分组,使其具有独

我试图将2个密码组合成一个,以提高性能,但没有成功

我需要得到在同一个密码中每个密码唯一的多个属性的计数

例1:

例2:

Match (n)
RETURN n.bar, count(*) AS count
我希望我可以同时运行这两个:

Match (n)
RETURN n.foo, count(*) AS fooCount, n.bar, count(*) AS barCount
但这会返回相同的计数,因为它会找到两者匹配的位置。不是我想要的

因此,我们正在寻找一种方法,将其分组,使其具有独特性,如:

Match (n)
RETURN {n.foo, count(*) AS fooCount}, {n.bar, count(*) AS barCount}
显然,这不是有效的语法,但说明了我正在尝试做什么


在此方面的任何帮助都将不胜感激

最好是背对背地执行此操作,同时执行所有操作对于此类查询不是一个好主意,因为聚合不会对您有利

你可以试试这个:

MATCH (n)
WITH n.bar as bar, count(*) AS count
WITH collect({bar:bar, count:count}) as barCounts
MATCH (n) 
WITH barCounts, n.foo as foo, count(*) AS count
WITH barCounts, collect({foo:foo, count:count}) as fooCounts
RETURN barCounts, fooCounts

最好是背对背地执行此操作,同时执行所有操作对于此类查询不是一个好主意,因为聚合不会对您有利

你可以试试这个:

MATCH (n)
WITH n.bar as bar, count(*) AS count
WITH collect({bar:bar, count:count}) as barCounts
MATCH (n) 
WITH barCounts, n.foo as foo, count(*) AS count
WITH barCounts, collect({foo:foo, count:count}) as fooCounts
RETURN barCounts, fooCounts

由于您正在尝试聚合单独的查询结果,因此也可以使用此方法作为同时返回这两个结果的快捷方式

Match (n)
RETURN "foo" as type, n.foo as value, count(*) AS count
UNION ALL
Match (n)
RETURN "bar" as type, n.bar as value, count(*) AS count
请注意,联合的两个返回必须具有相同的列名


此外,示例中的“type”列不是必需的,但它显示了如果两个查询的返回列数不相同,如何添加填充符。(或者如果您想知道结果来自哪个查询。)如果有一个“foo”和一个“bar”具有相同的值+计数,UNION ALL将保留这两个值,UNION将删除重复项(如果您删除类型列)。

因为您试图聚合单独的查询结果,您还可以使用作为一种快速简便的方法同时返回两者

Match (n)
RETURN "foo" as type, n.foo as value, count(*) AS count
UNION ALL
Match (n)
RETURN "bar" as type, n.bar as value, count(*) AS count
请注意,联合的两个返回必须具有相同的列名


此外,示例中的“type”列不是必需的,但它显示了如果两个查询的返回列数不相同,如何添加填充符。(或者,如果您想知道结果来自哪个查询。)如果有一个“foo”和一个“bar”具有相同的值+计数,UNION ALL将保留这两个值,UNION将删除重复项(如果您删除类型列)。

这花了很长时间才完成,但似乎已经奏效,谢谢!我只是希望有一个更“直截了当的方法”,因为这将变得非常复杂,有更多的选择。。。我需要12场比赛,而不仅仅是2场。担心性能。执行此操作后,4个属性和一个约60k节点的数据集的加载时间已超过一分钟,并添加了我遇到的第5个属性:“Neo.TransientError.General.OutOfMemoryError:内存不足,无法执行当前任务。请尝试在neo4j配置中增加“dbms.memory.heap.max_size”(通常在“conf/neo4j.conf”中,或者,如果您使用的是neo4j桌面,请通过用户界面找到),或者如果您正在运行嵌入式安装,请使用“-Xmx”命令行标志增加堆,然后重新启动数据库。“您确定这个用例真的是您所需要的吗?我想我以前没有见过这样的,必须在多个属性上找到所有可能的值(并计数)。这里甚至不使用标签,因此每次都必须重新访问所有节点,并且要保存的数据量随着每个属性的增加而不断增加。您需要将它们作为单个查询返回,还是需要多个查询返回?谢谢@InverseFalcon。我实际上是在我的实际用例中使用标签。我最初将它拆分成多个密码,并认为将它们合并会更快。。。我错了。单个端点需要所有这些数据。我想我的下一步是在导入过程中实际创建neo4j中的关系,让密码更简单。这花了很长时间才完成,但似乎已经成功了,谢谢!我只是希望有一个更“直截了当的方法”,因为这将变得非常复杂,有更多的选择。。。我需要12场比赛,而不仅仅是2场。担心性能。执行此操作后,4个属性和一个约60k节点的数据集的加载时间已超过一分钟,并添加了我遇到的第5个属性:“Neo.TransientError.General.OutOfMemoryError:内存不足,无法执行当前任务。请尝试在neo4j配置中增加“dbms.memory.heap.max_size”(通常在“conf/neo4j.conf”中,或者,如果您使用的是neo4j桌面,请通过用户界面找到),或者如果您正在运行嵌入式安装,请使用“-Xmx”命令行标志增加堆,然后重新启动数据库。“您确定这个用例真的是您所需要的吗?我想我以前没有见过这样的,必须在多个属性上找到所有可能的值(并计数)。这里甚至不使用标签,因此每次都必须重新访问所有节点,并且要保存的数据量随着每个属性的增加而不断增加。您需要将它们作为单个查询返回,还是需要多个查询返回?谢谢@InverseFalcon。我实际上是在我的实际用例中使用标签。我最初将它拆分成多个密码,并认为将它们合并会更快。。。我错了。单个端点需要所有这些数据。我认为我的下一步是在导入过程中实际创建neo4j中的关系,并让密码更简单。