更新数据就需要使用到谓词,也就是你要指定 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>
有时后更新要指定 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>