更新数据就需要使用到谓词,也就是你要指定 row 需要符合的条件,找到那笔数据之后进行更新。

例如我要更新 user,的 email,那我可能要先指定 user/wallet 是哪一个,然后再更新他的 email。

这时候我们要在 id 处用两个来指定:[ <predicate>, <object> ]

[
   {
      "_id":[
         "user/wallet",  // predicate
         "0x7EA1EaA27b313D04D359bF3e654FE927376e31Bc" // object
      ],
      "email":"[email protected]"
   }
]

cURL 指令:

# linux
curl -i -H "Content-Type: application/json" -d '[{"_id":["user/wallet","0x7EA1EaA27b313D04D359bF3e654FE927376e31Bc"],"email":"[email protected]"}]' <http://13.114.145.25/fdb/seedao/testing/transact>

# windows
curl -i -H "Content-Type: application/json" -d "[{\\"_id\\":[\\"user/wallet\\",\\"0x7EA1EaA27b313D04D359bF3e654FE927376e31Bc\\"],\\"email\\":\\"[email protected]\\"}]" <http://13.114.145.25/fdb/seedao/testing/transact>

进阶的方便技巧:Upserting (合并) 功能

有时后更新要指定 predicate 和 object 实在很麻烦,但不指定就变成可能是新增一个数据,所以可以指定一些 predicate 具有合并功能,这样系统只要检测到你添加的数据的 predicate 是已有的,就不会新创建一笔数据。

举例来说,如果我们指定 _predicate/name (predicate 名字) 为 user/wallet 是 upserting:

[
   {
      "_id":[
         "_predicate/name",
         "user/wallet"
      ],
      "upsert":true
   }
]

cURL 指令:

# linux
curl -i -H "Content-Type: application/json" -d '[{"_id":["_predicate\\/name","user\\/wallet"],"upsert":true}]' <http://13.114.145.25/fdb/seedao/testing/transact>

# windows
curl -i -H "Content-Type: application/json" -d "[{\\"_id\\":[\\"_predicate\\/name\\",\\"user\\/wallet\\"],\\"upsert\\":true}]" <http://13.114.145.25/fdb/seedao/testing/transact>

这样如果我们要更新特定 user/wallet 的 email,就可以用类似创建新的 user 一样的指令直接更新,而不会创建一个新的 user:

[
   {
      "_id": "user",
      "wallet": "0x7EA1EaA27b313D04D359bF3e654FE927376e31Bc", // 合并到现有的
      "email": "[email protected]" // <-- update
   }
]

cURL 指令:

# linux
curl -i -H "Content-Type: application/json" -d '[{"_id":"user","wallet":"0x7EA1EaA27b313D04D359bF3e654FE927376e31Bc","email":"[email protected]"}]' <http://13.114.145.25/fdb/seedao/testing/transact>

# windows
curl -i -H "Content-Type: application/json" -d "[{\\"_id\\":\\"user\\",\\"wallet\\":\\"0x7EA1EaA27b313D04D359bF3e654FE927376e31Bc\\",\\"email\\":\\"[email protected]\\"}]" <http://13.114.145.25/fdb/seedao/testing/transact>