【问题标题】:Updating documents in bulk批量更新文档
【发布时间】:2019-04-12 13:11:00
【问题描述】:

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

【问题讨论】:

    标签: pouchdb


    【解决方案1】:

    您可以使用更新处理程序更新单个文档而无需 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 开头的所有文档,按降序对它们进行排序,然后返回在您的情况下是最新的顶部数据集。

    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?

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 2021-12-13
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多