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