首页 > 解决方案 > Neo4j:如何添加带有标签名称的列表并确保资产的标签是列表的一部分?

问题描述

我有一个名为“BusinessAssetTypes”的标签。它指定哪些资产是业务资产的一部分。还有一个标签“DataAssetTypes”,它指定哪些标签是数据资产的一部分。

在以下查询中,我手动说:业务资产可以是首字母缩略词、业务术语或 KPI,数据资产可以是列、表或模式——> 查找业务资产和数据资产之间的关系。

MATCH (ba)-[rel]->(da)
WHERE (ba:Acronym OR ba:BusinessTerm OR ba:KPI) 
AND (da:Column OR da:Table OR da:Schema)
RETURN ba, da

问题是业务资产列表发生了变化。这就是为什么不应在 WHERE 子句中手动添加它,而应从标签“BusinessAssetTypes”中插入它。

我试图创建一个列表并稍后在查询中使用该列表:

MATCH (bat:BusinessAssetType)
WITH collect(bat.name) AS baType
MATCH (dat: DataAssetTypes)
WITH collect(dat.name) AS daType
MATCH (ba)-[rel]->(da)
WHERE ba IS PART OF baType
AND da IS PART OF daType
RETURN ba, da 

预先感谢您的帮助!

标签: neo4jcypher

解决方案


如果我理解您有目标业务资产标签的动态列表和数据资产标签的动态列表。所以我认为你会寻找的是:

MATCH (bat:BusinessAssetType)
MATCH (dat: DataAssetTypes)
WITH collect(DISTINCT bat.name) AS baType, 
     collect(DISTINCT dat.name) AS daType 

MATCH (ba)-[rel]->(da) 
WHERE any(x in labels(ba) WHERE x IN baType)
    AND any(y in labels(da) WHERE y in daType)
RETURN ba, da

推荐阅读