【发布时间】:2016-09-30 15:25:00
【问题描述】:
我已经开始在我的新项目中将 CouchDb 与 PouchDb 结合使用,并且相对较新。我有一个基本的疑问。
要更新文档,我需要有 _rev 值,这意味着查询数据库,例如如图here
// fetch mittens
db.get('mittens').then(function (doc) {
// update their age
doc.age = 4;
// put them back
return db.put(doc);
}).then(function () {
// fetch mittens again
return db.get('mittens');
}).then(function (doc) {
console.log(doc);
});
更新后,数据库中存在文档的两个修订版本。文档的旧版本仅在压缩过程中被清除。
如果我在我的文档 ID 中添加时间戳,例如 shashi@stackoverflow.com-user-1464772888286,那么我的数据库中有不同的文档,而不是同一文档的不同修订版。
添加新文档后,我可以删除时间戳较旧的文档。因此,查询时我可以使用
查询 all_docsstartkey="shashi@stackoverflow.com-user-"&endkey="shashi@stackoverflow.com-user-\uffff"
并根据时间戳获取最新的文档。 (无论如何,由于我在创建新文档时删除了旧文档,因此此查询只返回一个文档。)
在我正在构建的应用程序中,一个桌面应用程序,文档将仅在桌面上创建和修改,并同步到服务器用于仓储/报告/分析目的。因此,其他人修改文档导致冲突的情况很少。
最初,我采用保持 id 相同的方法。但是,我遇到了一个奇怪的错误,其中 pocuhdb 在尝试更新文档时抛出了一个错误,但是在 CouchDb 上创建了具有相同数据的不同修订,pouchDb 被配置为同步。由于时间紧迫,并且正在构建概念证明,因此我继续使用 _id 中的时间戳方法。
但是,现在我想知道这种方法的潜在缺陷是什么?我有一种直觉,因为我在任何地方都没有看到有人采用这种方法,但我不太确定它们是什么。
【问题讨论】:
-
这篇关于 CouchDb 的 10 个常见误解的演讲实际上建议为每次更改创建新文档 youtu.be/BKQ9kXKoHS8?t=10m10s