批量更新文档

问题描述 投票:0回答:1

我正在使用PouchDB将一些文档存储在浏览器中,我有一组对象,我设置为db.put,现在我需要“更新”它们,但不必手动放入_rev参数。我知道_rev参数是必需的,但我想将更新的对象存储为新文档,因为我认为它的开销较小。我的问题是,我怎样才能获取所有文档并获得每个文档的一个(最新的)推送文档。我在想时间戳他们,但我不想依赖它。任何方向都将非常感激。

pouchdb
1个回答
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以下请求的作用是查询以您的文档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?

© www.soinside.com 2019 - 2024. All rights reserved.