我根据某地流行病学的调查情况,建了一个库,用来分析病例的传播情况。
在分析有几个传播链的时候,用的时以下的语句:
MATCH (a:person)-[r]->() WITH a
CALL apoc.path.subgraphNodes(a, {maxLevel:-1}) YIELD node
WITH node,a where ‘person’ in labels(node)
SET node.component = id(a)
with node.component as com,collect(distinct node.name) as nodlist
return com,size(nodlist),nodlist order by size(nodlist) desc
上面的语句是我从网上找的例子中改造的,貌似正好能满足我的需求。同时,也查了一下apoc.path.subgraphNodes资料。在官方的案例中,一般会指定起始点,所以在后面的路径搜索时,理解起来也比较清楚。可是针对这个语句,我有几个疑问: MATCH (a:person)-[r]->() WITH a ——应该是获取了所有label为person的node,如果是这样的话,后面的路径搜索是怎么做的呢?是把所有label为person的node都做为起始点,都来搜索一遍吗? 还是用某种方式,比如随机选了一个node,然后再做的搜索?从执行的结果后,感觉有点像选了一个node后,再搜索的,因为后面执行了SET node.component = id(a) ,同一个子图的的node的component是相同的值。
但是,如果我做如下修改,发现结果会大不一样。如果CALL apoc.path.subgraphNodes是随机选了一个node,那这个结果应该是有几个subgraph,就返回几个node。
然而执行结果却是返回所有node,并且每个node都是独立返回的:
MATCH (a:person)-[r]->() WITH a
CALL apoc.path.subgraphNodes(a, {maxLevel:-1}) YIELD node
WITH node,a where ‘person’ in labels(node)
return distinct a.name,id(a)
由于没有在网上查到太多apoc.path.subgraphNodes的资料(也许是我查资料的方法没找对。。。),所以还想请各位指导一下,多谢!!!