我不知道自从给出答案后它是否发生了变化,但现在有可能
查看文档:
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html
我在 javascript 中这样使用它(将新块映射到具有所需结构的对象数组:
let params = {}
let tableName = 'Blocks';
params.RequestItems[tableName] = _.map(newBlocks, block => {
return {
PutRequest: {
Item: {
'org_id': orgId,
'block_id': block.block_id,
'block_text': block.block_text
},
ConditionExpression: 'org_id <> :orgId AND block_id <> :block_id',
ExpressionAttributeValues: {
':orgId': orgId,
':block_id': block.block_id
}
}
}
})
docClient.batchWrite(params, function(err, data) {
.... and do stuff with the result
您甚至可以混合使用puts 和deletes
如果您使用 dynogels(由于 dynogels 支持,您不能混合 em,但您可以做的是更新(使用 create,因为它在幕后将它作为 put 的 batchWrite 函数)
var item1 = {email: 'foo1@example.com', name: 'Foo 1', age: 10};
var item2 = {email: 'foo2@example.com', name: 'Foo 2', age: 20};
var item3 = {email: 'foo3@example.com', name: 'Foo 3', age: 30};
Account.create([item1, item2, item3], function (err, acccounts) {
console.log('created 3 accounts in DynamoDB', accounts);
});
请注意 DynamoDB 限制 (from the docs):
BatchWriteItem 操作在一个或多个表中放置或删除多个项目。对 BatchWriteItem 的一次调用可以写入多达 16 MB 的数据,其中可以包含多达 25 个放置或删除请求。要写入的单个项目可以大到 400 KB。
如果我没记错的话,我认为 dynogels 在发送请求之前将请求分成 25 个块,然后将它们收集在一个承诺中并返回 (尽管我对此不是 100% 确定) - 否则包装函数很容易组装