Neo4j: Как добавить список с именами меток и убедиться, что актив имеет метку, которая является частью списка? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть одна метка под названием "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 

Заранее благодарю за помощь!

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Узел может иметь несколько меток.

Все ваши узлы "бизнес-актива" должны иметь метку BusinessAsset (не BusinessAssetType, так как все метки в любом случае "типы") И вторую метку для конкретный c подтип бизнес-актива (например, KPI). Аналогично для активов данных.

Например, при создании узлов:

CREATE (ba:BusinessAsset:KPI {id: 123, ...})
CREATE (da:DataAsset:Table {id:234, ...})

и при запросе всех подключенных активов бизнеса и данных:

MATCH (ba:BusinessAsset)--(da:DataAsset)
RETURN ba, da
0 голосов
/ 20 марта 2020

Если я понимаю, у вас есть динамический c список целевых меток бизнес-активов и динамический c список меток активов данных. Поэтому я думаю, что вы бы искали:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...