批量更新文档

时间:2019-04-10 22:27:33

标签: pouchdb

我正在与PouchDB一起在浏览器中存储一些文档,我管理了db.put对象,现在我需要“更新”它们,而不必手动放置_rev参数。我知道_rev参数是必需的,但是我想将更新的对象存储为新文档,因为我认为它的开销较小。 我的问题是,我如何才能获取所有文档,而只获取一份(最新的)推送文档。我正在考虑给它们加上时间戳,但是我不想依靠它。任何方向将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用更新处理程序来更新单个文档而无需修订。 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 以下请求的作用是,它以doc id开头查询所有文档,对它们进行降序排序,然后返回顶部的数据集(在您的情况下将是最新的)。

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?