在一个事务中将多个附件放在 PouchDB 文档上

Put multiple attachments on a PouchDB document in one transaction

我有一个看起来像这样的函数

var Db = new PouchDB('mydb');

function attach(doc, pictures) {
  // expecting file URI
  var blobPromises = pictures.map(function(imgUri) {
    // https://github.com/nolanlawson/blob-util
    return blobUtil.imgSrcToBlob(imgUri);
  });

  // angular's $q
  return $q.all(blobPromises).then(
    function gotBlobs(blobs) {
      var batchId = (new Date()).getTime();

      var attachPromises = blobs.map(function(blob, i) {
        var attachmentId = 'picture/' + batchId + '/' + i;

        // NOTE: this is throwing error 409
        return Db.putAttachment(doc._id, attachmentId, doc._rev, blob, blob.type);
      });

      return $q.all(attachPromises);
    }
  )
}

现在我知道出了什么问题 - 相同的 doc._rev 被重新用于 all 附件插入。如果我更改我的代码以执行 Db.putAttachment() 一个接一个 并每次都查询新的 doc._rev,它应该可以工作。

但是:

  1. PouchDB 是否提供 API 像 putAttachments() 像什么 CouchDB has
  2. 否则通过put()创建文档时是否可以放附件?

是的,您可以在 put() 文档时附加任意数量的附件。

检查第一个例子from the guide。您可以改为执行以下操作:

db.put({
  _id: 'mydoc',
  _attachments: {
    'myattachment1.txt': {
      content_type: 'text/plain',
      data: blob1
    },
    'myattachment2.txt': {
      content_type: 'text/plain',
      data: blob2
    },
    'myattachment3.txt': {
      content_type: 'text/plain',
      data: blob3
    },
    // etc.
  }
});