Neo4j 在Cypher中,确定连接引用对象的对象的类型(标签)
我正在开发一个依赖关系分析工具,我提出了以下Cypher查询,它表示拥有相互引用的对象的模式,从一个模式到另一个模式推断依赖关系,如下所示:Neo4j 在Cypher中,确定连接引用对象的对象的类型(标签),neo4j,cypher,Neo4j,Cypher,我正在开发一个依赖关系分析工具,我提出了以下Cypher查询,它表示拥有相互引用的对象的模式,从一个模式到另一个模式推断依赖关系,如下所示: MATCH (sourceSchema:SCHEMA)-[:OWNS]->(objectOwnedBySource)-[:REFERENCES*..]->(objectOwnedByTarget)<-[:OWNS]-(targetSchema:SCHEMA) WHERE sourceSchema.name <> targetS
MATCH (sourceSchema:SCHEMA)-[:OWNS]->(objectOwnedBySource)-[:REFERENCES*..]->(objectOwnedByTarget)<-[:OWNS]-(targetSchema:SCHEMA)
WHERE sourceSchema.name <> targetSchema.name
WITH sourceSchema, targetSchema
ORDER BY targetSchema.name
RETURN sourceSchema.name AS schema,
collect(distinct targetSchema.name) AS dependsOn
ORDER BY sourceSchema.name
在一些帮助下,我还创建了一个查询,该查询为我提供了类型(标签)列表及其在图中每个模式的计数:
MATCH (sourceSchema:SCHEMA)-[:OWNS]->(objectOwnedBySource)
RETURN DISTINCT sourceSchema.name AS schema,
filter(x IN (labels(objectOwnedBySource)) WHERE NOT x="ENTITY")[0] AS type,
count(*) AS count
ORDER BY schema,type
上面的输出类似于:
schema type count
FOO TABLE 14
FOO SYNONYM 1
BAR FUNCTION 3
我的问题是:我如何以某种方式组合这一点,并获得导致模式到模式依赖的标签计数?我的意图是:
Schema DependsOnSchema ThroughLabelOnReferencedObject Count
FOO BAR TABLE 101
FOO BAR VIEW 10
FOO BAZ TABLE 6
(etc)
传入和传出引用的单独计数器的奖励点数:-)。提前感谢您的指点 我想到了:
MATCH (sourceSchema:SCHEMA)-[:OWNS]->(objectOwnedBySource)-[:REFERENCES*..]->(objectOwnedByTarget)<-[:OWNS]-(targetSchema)
WHERE sourceSchema <> targetSchema
RETURN DISTINCT sourceSchema.name AS source,
filter(x IN (labels(objectOwnedBySource)) WHERE NOT x="ENTITY")[0] AS sourceType,
targetSchema.name AS target,
filter(x IN (labels(objectOwnedByTarget)) WHERE NOT x="ENTITY")[0] AS targetType,
count(*) AS references
ORDER BY source,sourceType,target,targetType
MATCH (sourceSchema:SCHEMA)-[:OWNS]->(objectOwnedBySource)-[:REFERENCES*..]->(objectOwnedByTarget)<-[:OWNS]-(targetSchema)
WHERE sourceSchema <> targetSchema
RETURN DISTINCT sourceSchema.name AS source,
filter(x IN (labels(objectOwnedBySource)) WHERE NOT x="ENTITY")[0] AS sourceType,
targetSchema.name AS target,
filter(x IN (labels(objectOwnedByTarget)) WHERE NOT x="ENTITY")[0] AS targetType,
count(*) AS references
ORDER BY source,sourceType,target,targetType
source sourceType target targetType references
FOO TABLE BAR SEQUENCE 3
BAR FUNCTION BAZ PACKAGE 10
(etc)