Структура базы данных:
(:Event)-[:IS_TAGGED_BY]->(:EventTag {value})
Комментарии к структуре:
- Есть узлы событий
- Есть узлы EventTag
- Tagузлы имеют строковое свойство, называемое «значение»
- События могут быть помечены тегами через исходящую версию IS_TAGGED_BY rel
Мне нужно написать запрос, который будет возвращать только тесобытия, которые помечены определенным набором тегов.
Возможны два варианта такого запроса, которые возвращают:
- События, помеченные хотя бы одним из указанных тегов (назовем его
findTaggedByAny
). - События, помеченные всеми указанными тегами (назовем это
findTaggedByAll
).
Я могу написать запрос findTaggedByAny
:
MATCH (et:EventTag)--(e:Event) WHERE et.value in {0} RETURN e
здесь{0} - это где параметр запроса, содержащий набор значений тегов, будет заменен.
Итак, после замены запрос будет выглядеть так:
MATCH (et:EventTag)--(e:Event) WHERE et.value in ["tag1", "tag2"] RETURN e
Но у меня возникают трудностипытаясь реализовать запрос findTaggedByAll
, который также должен принимать тот же параметр и возвращать события, помеченные всеми тегами из набора.И не имеет значения, помечено ли событие какими-либо другими тегами или нет.