请教:这样的场景下的查询怎么写,多谢!
我用某个城市的新冠病例建了一个数据库,Node分成了3类,分别为:确诊病例:confirmed,无症状病例:asymptomatic,病例去过的地点:adress,在adress的属性中,我增加一个:num_of_related,代表有多少个病例来过这个地点。并建立了两种病例和去过的地点的关系。 match p=(m)-[r]-(a:adress) return p,结果如下:
现在,我有两个问题想请教大家,请各位指点! 1、查询所有病例,以及这些病例去过的地点,但不包括只有一个病例去过的地点。我现在只能把这些病例(去过多个地点,但这些地点只有这个病例去过)找出来,如下: match p=(m)-[]-(a:adress) with m,collect(a.num_of_related) as person_count where all (t1 IN person_count WHERE t1=1) return m.name 所有的病例怎么查,没有想出来,请各位指导,谢谢!
2、获取数据中的子图数量,即传播链个数,这个没想出来怎么写。。。
谢谢各位指点!
4 回复
下面的查询仅供参考,请根据自己的数据模型情况做修改:
1、查询所有病例,以及这些病例去过的地点,但不包括只限定病例去过的地点
//获取地点
MATCH (adr:Adress)
WITH adr
//获取该地点确诊病例
MATCH (adr)<--(cfm:Confirmed)
WITH adr,COLLECT(cfm) AS cfmList
//获取该地点无症状病例
MATCH (adr)<--(ast:Asymptomatic)
WITH adr,cfmList,COLLECT(ast) AS astList
//统计人数
WITH adr,cfmList,
SIZE(cfmList) AS cfmListSzie,
astList
SIZE(astList) AS astListSzie
//根据病例数过滤
//确诊病例数小于2,且无症状装病例大于10的地点
WHERE cfmListSzie<2 AND astListSzie>10
//输出该地点,以及确诊病例,无症状病例
RETURN adr,cfmListm,astList
2、获取数据中的子图数量,即传播链个数
- 如果是求连通图可以使用WCC和SCC算法,apoc或者algo(gds)有对应算法可以求解
- 如果是求满足图模式的子图个数可以直接使用Cypher模式匹配语句统计,案例如下:
MATCH
path0 = (n1)<-[r1]-(n2)-[r2]-(n3),
path1 = (n1)-[r4]->(n2),
path2 = (n1)-[r5]->(n3)
WITH [path0, path1, path2] AS graph
RETURN COUNT(*) AS graphCount