如何在neo4j cypher中进行多个节点更新?
现在我想这样做:
MATCH (user151325288158:User{userId:151325288158}),
(user88245:User{userId:88245})
SET user151325288158.balance=2902833.4219789803
SET user88245.balance=146701.0299999991
RETURN user151325288158.balance,user88245.balance;
但是我在这里遇到问题,如果这样的用户在DB中缺席,则没有人会更新。 其他问题是性能,这种查询很慢。
是否有一些方法可以进行此类批量更新?
答案 0 :(得分:1)
假设您在地图/字母数组中有userId
个和新balance
个值对,如下所示:
[
{
"userId": 151325288158,
"balance": 146701.09
},
{
"userId": 887436512344,
"balance": 22453.34
},
{
"userId": 873927654232,
"balance": 300002.22
}
]
您可以将此数组作为参数传递给MATCH
上userId
的Cypher查询,并更新balance
属性,如下所示:
WITH {data} AS pairs
UNWIND pairs AS p
MATCH (u:User) WHERE u.userId = p.userId
SET u.balance = p.balance
答案 1 :(得分:0)
通过遵循William Lyon的answer,我能够实现 多个属性 的批量更新,如下所示:
UNWIND [{id: 123456, name: "John", age: 27}, {id: 789012, name: "Jane", age: 24}] AS updateUser
MATCH (user: User)
WHERE user.id = updateUser.id
SET user += updateUser
RETURN user