如何在pouchdb中实现部分更新?
How can you implement partial updates in pouchdb?
假设您有以下文档:
{ title: 'take out the trash', priority: 'medium' }
并且有两个不同的客户端同时编辑此数据,例如客户端1想要将标题更改为清洁盘子,客户端2想要将优先级更改为high。
如何使用pouchdb实现?
更新处理程序和部分更新在couchdb中得到支持,但是它们需要对每个更新进行REST调用,这违背了使用pouchdb离线工作并稍后同步的目的。另一个解决方案是使用every doc is a delta方法。
这个函数检索所有的文档:
function merge(obj1, obj2) {
for (var i in obj2) {
obj1[i] = obj2[i];
}
}
function all(db) {
return new Promise(function(fulfill, reject) {
var docs = {};
db.allDocs({include_docs: true}, function(err, doc) {
// sort by createdAt as cannot guarantee that order preserved by pouch/couch
doc.rows.sort(function(a, b) {
return a.doc.$createdAt > b.doc.$createdAt;
});
doc.rows.forEach(function(el, i) {
if (!el.doc.$id) { // first delta for doc?
el.doc.$id = el.doc._id;
}
if (docs[el.doc.$id]) { // exists?
merge(docs[el.doc.$id], el.doc);
} else {
docs[el.doc.$id] = el.doc;
}
if (i == doc.rows.length - 1) { // last element?
fulfill(docs);
}
});
});
});
}
和这个函数允许你做部分更新:
function put(object, db) {
object.$createdAt = (new Date()).toJSON();
return new Promise(function(fulfill, reject) {
db.post(object).then(function(object) {
fulfill(object);
});
});
}
完整示例请参见使用Pouch
相关文章:
- 如何使用动画实现纸张推车
- Javascript循环不会自我更新
- 如何在执行 Ajax 请求大量数据库更新时实现进度条
- 如何实现更新文章系统
- 实现已验证用户更新状态的最佳方式,作为对系统中已更改状态的反应.(ASP.NET MVC网站)
- 如何在 AngularJs 中的数据库发生变化时立即实现自动视图更新
- 实现具有快速更新脉冲响应的卷积混响
- 通过锚链接实现跳到主要内容技术时更新键盘焦点
- 最简单的实现方式是网页上的动态更新表(java/css)
- Highcharts:在数据实现时更新图表
- 频繁的轮询会使服务器过载吗?如果是的话;这是实现实时更新的最佳方式
- 如何在pouchdb中实现部分更新?
- 实现轮询Rails前端调用更新
- 如何实现一个方法来更新jquery插件中的选项
- Java' Rhino实现实现了哪个JavaScript (ECMAScript)版本(更新策略是什么?)
- 由于实现$mdDialog(材料设计),Angular没有更新循环
- 在Rails中实现AJAX调用复选框来更新数据库
- 如何在后台实现自动更新
- 如何在angularjs中实现基于其他对象的对象更新
- 我如何实现实时更新预览(例如Stack Overflow帖子)