如何处理cloudantdb bluemix中的_rev id,它是否会针对每次更新进行更改?

时间:2017-01-27 11:57:27

标签: ibm-cloud cloudant node-red

考虑我从设备向mqtt订阅者发送记录。我发送的数据需要存储在cloudant db中。

例如,如果我发送{"_id":45,"dob":1205},它将以_rev id存储在cloudantdb中。如果我需要更新_id:45,我需要包含_rev id,它是长数字和字母数字。

所以在节点红色中是否还有其他方法来动态获取_rev id并更新文档?

1 个答案:

答案 0 :(得分:2)

要更新Cloudant / CouchDB中的任何文档,您需要该文档的_id和最新_rev值。

也就是说,为了使用_id = 123更新文档,您必须先行 GET database/123,它将返回JSON文档,如此

{
  _id:123,
  _rev:1-abcdefg,
  somekey : somedata
}

然后根据需要更改文档。

{
  _id:123,
  _rev:1-abcdefg,
  somekey : somedata,
  newkey : newdata
}

PUT database/123

然后,当你GET database/123时,你应该得到像

这样的东西
{
  _id:123,
  _rev:2-gfedbca,
  somekey : somedata,
  newkey : newdata
}

您会看到_rev值已更改以反映文档中的更改。

如果要再次更新文档,请确保包含最新的_rev值。

这意味着为了更新Cloudant / CouchDB中的文档,您必须首先获取该文档(至少是_id和_rev),在本地修改数据,然后将其重新输入数据库。

这里有一些应该有用的文档:http://docs.couchdb.org/en/2.0.0/intro/api.html#revisions

(注意,如果您在后续更新中使用旧的_rev,您将开始在数据库中创建冲突,从而导致文档的广泛修订树,最终降低数据库性能。)