批量更新文档

Updating documents in bulk

我正在使用 PouchDB 在浏览器中存储一些文档,我有一个对象集合,我设法 db.put,现在我需要 "update" 它们,但无需手动放置 _rev 参数。我知道 _rev 参数是必需的,但我想只是将更新的对象存储为新文档,因为我认为它的开销较小。 我的问题是,我怎样才能获取所有文档并只获取每个文档的一个(最新)推送文档。我在考虑给它们加上时间戳,但我不想依赖它。任何方向将不胜感激。

您可以使用更新处理程序更新单个文档而无需修订。 https://docs.couchdb.org/en/latest/ddocs/ddocs.html?#update-functions

正在更新多个文档以检索最新的

可以使用时间戳或版本号更新多个文档:

要获取最新的文档版本,您可以编写一个视图并将其缩小以显示最大值:

您的实施可能如下所示:

// Your documents
// PUT #1
{
  _id: "test_doc_[timestamp],
  doc_id: "test_doc",
  doctype: "book",
  timestamp: [timestamp],
  payload: "lorem ipsum"
}
// PUT #2
{
  _id: "test_doc_[timestamp + n],
  doc_id: "test_doc",
  doctype: "book",
  timestamp: [timestamp + n],
  payload: "dolor sit amet"
}

获取一份文档的最新版本

要获取最新版本的 'test_doc',您可以使用 _all_docs 下面的请求所做的是查询以您的文档 ID 开头的所有文档,对它们进行降序排序,并且 returns 您是最新的顶级数据集。

GET /db/_all_docs?start_key="test_doc_"&end_key="test_doc_\ufff0"&descending=true&limit=1

正在获取许多文档的最新版本

要获取许多文档的最新版本,您可以编写一个视图,然后将其缩减:

// view not formated so that it can be used directly
{
  "_id": "_design/books",
  "views": {
    "newest": {
      "reduce": "function (key, values, rereduce) {\r\n  return Math.max.apply({}, values);\r\n}",
      "map": "function (doc) {\n  if(doc.doctype === \"book\")\n  emit(doc.doc_id, doc.timestamp);\n}"
    }
  },
  "language": "javascript"
}

您可以调用视图: GET /db/_design/books/_view/newest?descending=true&reduce=true&group=true

来源:

https://docs.couchdb.org/en/latest/ddocs/ddocs.html?#map-functions

How to calculate Max value using Map-Reduce in CouchDB?