имеет следующий график
CREATE (s1:SOME {id:'s1'} )
CREATE (s2:SOME {id:'s2'} )
CREATE (a11:ANOTHER {id:'a11', tags:["tag1", "tag2"] } )
CREATE (a12:ANOTHER {id:'a12', tags:["tag2", "tag3"] } )
CREATE (a21:ANOTHER {id:'a21', tags:["tag3", "tag4"] } )
CREATE (a22:ANOTHER {id:'a22', tags:["tag4", "tag5"] } )
CREATE (s1)-[:CONTAINS ]->(a11),
(s1)-[:CONTAINS ]->(a12),
(s2)-[:CONTAINS ]->(a21),
(s2)-[:CONTAINS ]->(a22)
и заполняет записи следующим запросом:
match (s:SOME)
with s
OPTIONAL MATCH (a:ANOTHER)-[r:CONTAINS]-(s)
WITH s, COLLECT(DISTINCT a) AS aa
return s.id, aa
Теперь я хочу добавить некоторые ограничения в поле ANOTHER.tags:
match (s:SOME)
with s
OPTIONAL MATCH (a:ANOTHER)-[r:CONTAINS]-(s)
where 'tag2' in a.tags
WITH s, COLLECT(DISTINCT a) AS aa
return s.id, aa
результат:
╒══════╤══════════════════════════════════════════════════════════════════════╕
│"s.id"│"aa" │
╞══════╪══════════════════════════════════════════════════════════════════════╡
│"s2" │[] │
├──────┼──────────────────────────────────────────────────────────────────────┤
│"s1" │[{"id":"a11","tags":["tag1","tag2"]},{"id":"a12","tags":["tag2","tag3"│
│ │]}] │
└──────┴──────────────────────────────────────────────────────────────────────┘
Но я хочу вообще пропустить запись s2, так как она не содержит обязательный тег
Еще одна вещь - что если я хочу проверить несколько тегов?например, ["tag1", "tag2"] (в этом случае должны отвечать пустыми данными), могу ли я использовать что-то вроде пересечения?