Te damos el arreglo a esta traba, o por lo menos eso creemos. Si sigues con alguna interrogante coméntalo y sin dudarlo te ayudaremos
Solución:
Como notó, DynamoDB no admite una operación de actualización por lotes. Necesitará consultar y obtener el keys para todos los registros que desea actualizar. Luego recorra esa lista, actualizando cada elemento uno a la vez.
Puede usar la acción TransactWriteItems para actualizar varios registros en la tabla de DynamoDB.
La documentación oficial está disponible aquí, también puede ver el ejemplo de TransactWriteItems javascript/nodejs aquí.
No sé si ha cambiado desde que se dio la respuesta, pero ahora es posible.
Consulte los documentos: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html
Lo he usado así en javascript (asignando los nuevos bloques a un array de objetos con la estructura deseada:
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
Incluso puedes mezclar puts
y deletes
Y si está usando dynogels (no puede mezclarlos debido al soporte de dynogels, pero lo que puede hacer es actualizar (use create porque detrás de escena se convierte en la función batchWrite como put)
var item1 = email: '[email protected]', name: 'Foo 1', age: 10;
var item2 = email: '[email protected]', name: 'Foo 2', age: 20;
var item3 = email: '[email protected]', name: 'Foo 3', age: 30;
Account.create([item1, item2, item3], function (err, acccounts)
console.log('created 3 accounts in DynamoDB', accounts);
);
Tenga en cuenta esto de las limitaciones de DynamoDB (de los documentos):
La operación BatchWriteItem coloca o elimina varios elementos en una o más tablas. Una sola llamada a BatchWriteItem puede escribir hasta 16 MB de datos, que pueden comprender hasta 25 solicitudes de colocación o eliminación. Los elementos individuales que se van a escribir pueden tener un tamaño de hasta 400 KB.
Si no recuerdo mal, creo que Dynogels está fragmentando las solicitudes en mandriles de 25 antes de enviarlas y luego recopilarlas en una promesa y devolverlas. (aunque no estoy 100% seguro de esto) – de lo contrario, una función de contenedor sería bastante simple de ensamblar
Valoraciones y comentarios
Recuerda algo, que tienes el privilegio parafrasear si te ayudó.