javascript - 如何在 pouchdb 中实现部分更新?

标签 javascript couchdb updates pouchdb

假设您有以下文档:

{ title: 'take out the trash', priority: 'medium' }

并且您有两个不同的客户端同时编辑此数据,例如客户端 1 想要将标题更改为洗碗,客户​​端 2 想要将优先级更改为

如何使用 pouchdb 实现这一点?

最佳答案

Update handlerspartial updates 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);
    });
  });
}

有关完整示例,请参阅 Partial Updates Using Pouch

关于javascript - 如何在 pouchdb 中实现部分更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25050818/

相关文章:

javascript - 如何覆盖react-chartist组件中的样式?

javascript - 如何在javascript或jquery中添加两个或两个以上输入框值

javascript - CouchDB 在时间戳内获取结果

database - Cloudant 中的 View 何时以及多久更新一次?如何将其配置为仅在查询时更新 View ?

updates - 使用 Dexie,如何使用非主索引更新多个对象?

javascript - 将 facebook 日期格式转换为 javascript 日期

Javascript 无法访问对象键值...它们周围有引号

backup - 创建长沙发数据库备份的最少侵入性方法是什么?

Python eve 分页请求和更新请求

java - 完成后以编程方式关闭 ACTION_VIEW 对话框