Продолжая следующий вопрос Индекс отношений Neo4j Cypher вручную, триггер APOC и дублирование данных Я создал сценарий, который воспроизводит проблему:
CALL apoc.trigger.add('TEST_TRIGGER', "UNWIND keys({assignedRelationshipProperties}) AS key
UNWIND {assignedRelationshipProperties}[key] AS map
WITH map
WHERE type(map.relationship) = 'LIVES_IN'
CALL apoc.index.addRelationship(map.relationship, keys(map.relationship))
RETURN count(*)", {phase:'before'})
CREATE (p:Person) SET p.id = 1 return p
CREATE (p:Person) SET p.id = 2 return p
CREATE (c:City) return c
MATCH (p:Person), (c:City) WHERE p.id = 1 CREATE (p)-[r:LIVES_IN]->(c) SET r.time = 10 RETURN type(r)
MATCH (p:Person), (c:City) WHERE p.id = 2 CREATE (p)-[r:LIVES_IN]->(c) SET r.time = 20 RETURN type(r)
Теперь давайте попробуем выбратьчеловек с r.time = 10
:
MATCH (p:Person)-[r:LIVES_IN]->(c:City)
CALL apoc.index.in(c, 'LIVES_IN', 'time:10') YIELD node AS person
RETURN person
Приведенный выше запрос корректно возвращает только один узел.
Теперь давайте сделаем то же самое, но вернем число person
:
MATCH (p:Person)-[r:LIVES_IN]->(c:City)
CALL apoc.index.in(c, 'LIVES_IN', 'time:10') YIELD node AS person
RETURN count(person)
Приведенный выше запрос возвращает count = 2
.
Почему этот запрос возвращает count = 2
вместо одного узла?
Кроме того, следующий запрос:
MATCH (p:Person)-[r:LIVES_IN]->(c:City)
CALL apoc.index.relationships('LIVES_IN', 'time:10') YIELD rel
RETURN rel
возвращает 2 отношения:
{
"time": 10
}
{
"time": 10
}
, но я ожидаю, что в ручном индексе будет только один, где time = 10
.
Что я делаю не так?