У меня есть база данных с пользователями (u:User {id: 1})
, статусами пользователей (us:UserStatus {status: 'pending'})
и связями между ними (u)-[hs:HAS_STATUS {from: 1541030400, to: 4102444800}]->(us)
.
Где пользовательские статусы могут быть "pending"
, "active"
или "suspended"
,И 2100-01-01
- это некоторая дата в будущем, означающая, что у пользователя все еще есть этот статус.
Я пытаюсь выполнить запрос, который обновляет статус пользователя, создавая новые отношения с новым статусом и архивами.старые отношения, установив для свойства to
текущую дату.
Это то, что я пробовал:
MERGE (u:User { id: 1 })
WITH u
MATCH (u)-[hs1:HAS_STATUS]->(us1:UserStatus)
WHERE us1.status <> 'active' AND hs1.to > 1544400000
SET hs1.to = 1544400000
MERGE (us2:UserStatus {status: 'active'})
MERGE (u)-[hs2:HAS_STATUS {from: 1544400000, to: 4102444800}]->(us2)
Если у пользователя уже есть статус, удовлетворяющий WHERE
условие, затем оно архивируется и создается новое статусное отношение.Однако, если у пользователя еще нет статуса, предложение SET
пропускается (как и предполагалось), однако пропускаются и две строки MERGE
.Как я могу гарантировать, что они выполняются независимо от слияния?
Редактировать: В исходном запросе были опечатки.