Предполагая, что список пользователя передается как list
параметр , и вы хотите точно сопоставить списки cxc.elementLabel
(кроме порядка элементов), это должно работать:
MATCH (node:CXEligibilityRuleConstruct)-[:_properties]->()-->()
MATCH (node)<-[:CXEHasChild]-(parent)
WHERE parent.nodeName = 'Network Segmentation'
WITH node
MATCH (node)-[:CXComponentHasCXRuleConstruct]-(cxc:CXComponentHierarchy)
WHERE cxc._type = 'CXComponent' AND apoc.coll.disjunction(cxc.elementLabel, $list) = []
RETURN node.elementLabel
Функция APOC apoc.coll.disjunction(a, b)
возвращает список с элементами, которых нет ни в a
, ни в b
.
[ОБНОВЛЕНИЕ]
Если вы не можете использовать APOCи $list
никогда не имеет дубликатов элементов, тогда это должно работать:
MATCH (node:CXEligibilityRuleConstruct)-[:_properties]->()-->()
MATCH (node)<-[:CXEHasChild]-(parent)
WHERE parent.nodeName = 'Network Segmentation'
WITH node
MATCH (node)-[:CXComponentHasCXRuleConstruct]-(cxc:CXComponentHierarchy)
WHERE cxc._type = 'CXComponent' AND
SIZE(cxc.elementLabel) = SIZE($list) AND
ALL(x IN $list WHERE x IN cxc.elementLabel)
RETURN node.elementLabel