У меня есть несколько узлов и отношений, содержащих свойство списка (мы будем называть его типами). Я хочу сгруппировать их, используя apoc.nodes.group, но только если они имеют определенный тип в этом списке.
Вот некоторый шифровальный код, показывающий, чего я хотел бы достичь:
// 1. Sample data
CREATE (foo:Somenode {name: 'foo', types:['abc'], groupAs: 'groupA'})
CREATE (bar:Somenode {name: 'bar', types:['abc', 'def'], groupAs: 'groupB'})
CREATE (foobar:Somenode {name: 'foobar', types:['def'], groupAs: 'groupA'})
CREATE (foo)-[fooToBar:SOME_RELATIONSHIP {types:['abc']}]->(bar)
CREATE (bar)-[barToFoobar:SOME_RELATIONSHIP {types:['def']}]->(foobar)
// 2. Filter on types
WITH foo, bar, foobar, fooToBar, barToFoobar
MATCH (s)-[r]->(d)
WHERE 'abc' IN s.types
AND 'abc' IN r.types
AND 'abc' IN d.types
// 3. Group by the groupAs property
CALL apoc.nodes.group(['*'], ['groupAs']) YIELD nodes, relationships
RETURN nodes, relationships
Ожидается: я вижу два виртуальных узла, groupA (состоит только из foo) и groupB (состоит только из бара). Они связаны отношением fooToBar.
Фактически: виртуальный узел groupA состоит из foo AND foobar, а два виртуальных узла связаны с помощью fooToBar AND barToFoobar.
Я не могу получитьхранимая процедура для выполнения только на моем отфильтрованном подмножестве данных. Может быть, это просто невозможно, но меня это немного удивит. Я что-то упустил?
Спасибо!