Проблема с новой функцией Cypher 3.1 head()

76
11

Мы используем новую функцию Cypher 3.1 head() и видим необычное (неправильное?) Поведение, когда оно используется в инструкции RETURN после команды OPTIONAL MATCH. Похоже, что значения, которые метки не совпадают в необязательном совпадении, отрицательно влияют на данные, уже собранные с точки зрения head(), при этом, как и ожидалось, для остальной части инструкции RETURN. Любые идеи о том, что мы делаем неправильно или это непреднамеренное последствие в двигателе Neo4j?

MATCH (productLine:ProductLine)-[:CHILD]->(product:Product)-[:CHILD]->(application:Application)-[:MATCHES]->(:Rule {name: 'Tier-0 Application'})
WITH productLine,
application
OPTIONAL MATCH (application)-[mr:MATCHES]->(:Rule {name: 'Multiple Regions'})
WITH application,
mr,
productLine
RETURN
productLine.name AS ProductLine,
head([(productLine)-[:PRODUCT_MANAGER]->(person:Person) | person.name]) AS ProductLineManager,
mr.numServers,
application.id AS AppId

Здесь мы видим:

ProductLine ProductLineManager  mr.numServers   AppId
PL1 null null IN000041
PL2 LAST,FIRST 6 AP010024
PL3 LAST,FIRST 6 AP107752
PL4 LAST,FIRST 11 AP106560
PL5 null null AP012190

спросил(а) 2021-01-19T18:29:24+03:00 2 месяца, 3 недели назад
1
Решение
62

Похоже, что это ошибка, связанная с пониманием паттерна, а не с функцией head(), когда есть строки, сгенерированные OPTIONAL MATCH.

Я смог воспроизвести ошибку, используя график фильмов в качестве базы.

Я создал ошибку для этого на трекерах Neo4j, в комплекте с примерами.

В качестве обходного пути похоже, что использование DISTINCT на последнем WITH или в RETURN может привести к возврату ожидаемых результатов.

ответил(а) 2021-01-19T18:29:24+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема