Neo4j数据批量更新

Sou*_*Cub 4 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;
Run Code Online (Sandbox Code Playgroud)

但这里我有一个问题,如果数据库中不存在这样的用户,则没有人会被更新。另一个问题是性能,这样的查询很慢。

有某种方法可以进行此类批量更新吗?

Wil*_*yon 5

假设您在映射/字典数组中有成对的userIds 和新值,如下所示:balance

[
    {
      "userId": 151325288158,
      "balance": 146701.09
    },
    {
      "userId": 887436512344,
      "balance": 22453.34
    },
    {
      "userId": 873927654232,
      "balance": 300002.22
    }
]
Run Code Online (Sandbox Code Playgroud)

您可以将此数组作为参数传递给 Cypher 查询MATCHuserId更新balance属性,如下所示:

WITH {data} AS pairs
UNWIND pairs AS p
MATCH (u:User) WHERE u.userId = p.userId
SET u.balance = p.balance 
Run Code Online (Sandbox Code Playgroud)