Neo4j批量更新数据

时间:2016-07-01 15:25:29

标签: neo4j

如何在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中缺席,则没有人会更新。 其他问题是性能,这种查询很慢。

是否有一些方法可以进行此类批量更新?

2 个答案:

答案 0 :(得分:1)

假设您在地图/字母数组中有userId个和新balance个值对,如下所示:

[
    {
      "userId": 151325288158,
      "balance": 146701.09
    },
    {
      "userId": 887436512344,
      "balance": 22453.34
    },
    {
      "userId": 873927654232,
      "balance": 300002.22
    }
]

您可以将此数组作为参数传递给MATCHuserId的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 Lyonanswer,我能够实现 多个属性 的批量更新,如下所示:

            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