Вы можете хранить все, что вам нужно, в одном запросе, поскольку он дает желаемый результат. Лучший способ работы с вашими данными зависит от схемы и количества данных в вашей базе данных. Взгляните на Настройка запросов , которая включает план выполнения и профилирование.
Например, на минимальном наборе данных после профилирования вашего запроса я получил сводку
Cypher version: CYPHER 3.5, planner: COST, runtime: INTERPRETED. 76 total db hits in 11 ms.
В том же наборе данных я попробовал модифицированный запрос
profile
MATCH (u:User {username: "carere"})-[r:WROTE]->(:Page) DELETE r
WITH u MATCH (pages:Page) WHERE pages.title IN ['toto', 'titi', 'tete']
MERGE (u)-[r:WROTE]->(pages)
RETURN u, r, pages
со сводкой
Cypher version: CYPHER 3.5, planner: COST, runtime: INTERPRETED. 70 total db hits in 9 ms.
Но если мы расширим наш набор данных дополнительными независимыми узлами с запросом
UNWIND range(0, 100) as entityId
CREATE (: User {username: "user" + entityId})-[:WROTE]->(: Page {title: "title" + entityId})
тогда резюме профилирования будет выглядеть немного иначе
# first query
Cypher version: CYPHER 3.5, planner: COST, runtime: INTERPRETED. 1562 total db hits in 52 ms.
#modified query
Cypher version: CYPHER 3.5, planner: COST, runtime: INTERPRETED. 676 total db hits in 19 ms.
И с этой информацией вы можете начать играть с индексами и настройкой схемы
Надеюсь, это будет полезно.