在一个事务中将多个附件放在 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
,它应该可以工作。
但是:
- PouchDB 是否提供 API 像
putAttachments()
像什么 CouchDB has?
- 否则通过
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.
}
});
我有一个看起来像这样的函数
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
,它应该可以工作。
但是:
- PouchDB 是否提供 API 像
putAttachments()
像什么 CouchDB has? - 否则通过
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.
}
});