Neo4j 如何使用cypher通过方向和类型获得节点的阶数

Neo4j 如何使用cypher通过方向和类型获得节点的阶数,neo4j,cypher,Neo4j,Cypher,具体地说,我正在寻找与[1]等价但使用Cypher的函数。我想一种方法是使用 START n=node(43) MATCH (n)-[r:KNOWS|LIKES]->() RETURN n, count(r) AS degree 然而,在我的用例中,我需要获得(并使用)由更复杂的查询产生的潜在多个节点的度,并且上述方法无法扩展 [1] 您是否关心仅限于知道和喜欢的关系 MATCH (n)-[r]->() WHERE ID(n) = 43 RETURN n, count(r) AS

具体地说,我正在寻找与[1]等价但使用Cypher的函数。我想一种方法是使用

START n=node(43) MATCH (n)-[r:KNOWS|LIKES]->() RETURN n, count(r) AS degree
然而,在我的用例中,我需要获得(并使用)由更复杂的查询产生的潜在多个节点的度,并且上述方法无法扩展


[1] 您是否关心仅限于
知道
喜欢的关系

MATCH (n)-[r]->() WHERE ID(n) = 43 RETURN n, count(r) AS degree
但是你必须要有大量的人际关系才能让它不具有规模。如果您使用ID,那么Cypher将直接进入节点,然后浏览它的关系。它不取决于总节点数/关系数,只取决于附加到节点的关系数


我不确定这是否回答了您的问题,但请告诉我您是否对可伸缩性有任何具体的担忧。

您是否关心仅限于
知道和
喜欢的关系

MATCH (n)-[r]->() WHERE ID(n) = 43 RETURN n, count(r) AS degree
但是你必须要有大量的人际关系才能让它不具有规模。如果您使用ID,那么Cypher将直接进入节点,然后浏览它的关系。它不取决于总节点数/关系数,只取决于附加到节点的关系数


我不确定这是否回答了您的问题,但如果您对可扩展性有任何具体的顾虑,请告诉我。

谢谢Brian。但我想我还不够清楚。在我的实际用例中,我不会使用ID。我编写的示例与[1]中的示例类似。我的查询看起来更像:
MATCH(n:LABEL)-[r:REL_TYPE_1]->(m),(n)-[s:REL_TYPE_2 | REL_TYPE_3]->()和count(s)*m。因此,我希望在密码中有某种功能。或者,我正在考虑我感兴趣的预计算学位,并将其作为节点属性。当性能变差时,预计算不一定是个坏主意。首先,有几件事需要注意。您可能希望在
(n:LABEL)
匹配
,然后在两个(或多个)其他路径上
可选匹配
,以便在度数为
0
时获得结果。其次,我最近接触了语法
返回大小((n)-[s:REL\u TYPE_2 | REL\u TYPE_3]->
)。我不知道这是否更有效,但值得一试再次感谢。不幸的是,
size
对我的情况没有帮助,但知道它的存在很好。我在文档中找不到它。我想按边属性获取度。我该怎么做?例如,获得演员和他们在1990年至2000年间出演的电影数量。但我想我还不够清楚。在我的实际用例中,我不会使用ID。我编写的示例与[1]中的示例类似。我的查询看起来更像:
MATCH(n:LABEL)-[r:REL_TYPE_1]->(m),(n)-[s:REL_TYPE_2 | REL_TYPE_3]->()和count(s)*m。因此,我希望在密码中有某种功能。或者,我正在考虑我感兴趣的预计算学位,并将其作为节点属性。当性能变差时,预计算不一定是个坏主意。首先,有几件事需要注意。您可能希望在
(n:LABEL)
匹配
,然后在两个(或多个)其他路径上
可选匹配
,以便在度数为
0
时获得结果。其次,我最近接触了语法
返回大小((n)-[s:REL\u TYPE_2 | REL\u TYPE_3]->
)。我不知道这是否更有效,但值得一试再次感谢。不幸的是,
size
对我的情况没有帮助,但知道它的存在很好。我在文档中找不到它。我想按边属性获取度。我该怎么做?例如,获得演员和他们在1990年至2000年间出演的电影数量