我有一个包含用户(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
也跳过两行。无论合并如何,我如何确保它们被执行?
编辑: 原始查询有一些错别字。