Как охватить apoc.nodes.group подмножеством данных - PullRequest
0 голосов
/ 18 октября 2019

У меня есть несколько узлов и отношений, содержащих свойство списка (мы будем называть его типами). Я хочу сгруппировать их, используя 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.

Я не могу получитьхранимая процедура для выполнения только на моем отфильтрованном подмножестве данных. Может быть, это просто невозможно, но меня это немного удивит. Я что-то упустил?

Спасибо!

...