Usando batchWriteItem en dynamodb

Tengo dos tablas en mi dynamo db, una es la tabla candidata y la otra es la tabla de usuario. Quiero usar batchWriteItem en dynamo db para agregar los datos en la tabla.

La consulta que he formateado es la siguiente

var user = { userid: usrid, role: 'candidate', password: vucrypt.encryptpass(pass) }; var canduser = { fname: req.body.fname, lname: req.body.lname, location: req.body.location, phone: req.body.phone, ccode: req.body.ccode, grad: req.body.grad, pgrad: req.body.pgrad, ograd: req.body.ograd, experience: exp, linkedin: req.body.linkedin, terms: tandc }; canduser = vutools.fixcanduser(canduser); canduser.userid = usrid; var writes = { 'users': [{put: user}], 'candidate': [{put: canduser}], }; 

Pero si yo uso
dynamodb.batchWriteItem(writes, function(err, regdata) { }

Está terminando como error. ¿Cómo puedo escribir la consulta correcta? El error que estoy recibiendo es este.

 MultipleValidationErrors: There were 3 validation errors: * MissingRequiredParameter: Missing required key 'RequestItems' in params * UnexpectedParameter: Unexpected key 'users' found in params * UnexpectedParameter: Unexpected key 'candidate' found in params 

Para escribir por lotes en DynamoDB, los datos deben estar formados de forma dinámica. Tiene un ejemplo a continuación, tenga en cuenta que dynamobb batchwrite solo acepta mawimum de 25 elementos por solicitud.

así que de acuerdo con el documento debes tener:

1. Atributos

“ATTRIBUTE_1”: {“S”: “ATTRIBUTE_1_VALUE”}

Según tu ejemplo:

“rol”: {“S”: “candidato”}

2. Artículos

Cada elemento debe tener este formato.

  PutRequest: { Item: { ..., "ATTRIBUTE_1": { "S": "ATTRIBUTE_1_VALUE" }, ... } } 

3. Arreglo de elementos para agregar

Cree una matriz de elementos, que no exceda los 25 elementos, (es un límite de dynamodb para batchwrite)

4. Tu solicitud params

ponlo junto

 var params = { RequestItems: { "TABLE_NAME": [ //the array you just created in step 3 ] } } 

5. la solicitud

 ddb.batchWriteItem(params, function(err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data); } }); 

ACTUALIZAR

Tu ejemplo será algo como esto:

 var params = { "RequestItems": { "TABLE_NAME": [ { "PutRequest": { Item: { "userid": { "N": "usrid" }, "role": { "S": 'candidate' }, "password": { "S": vucrypt.encryptpass(pass) } } } } ], "TABLE_NAME2": [ { "PutRequest": { Item: { "fname": { "S": req.body.fname }, "lname": { "S": req.body.lname }, "location": { "S": req.body.location }, "phone": { "S": req.body.phone }, "ccode": { "S": req.body.ccode }, "grad": { "S": req.body.grad }, "pgrad": { "S": req.body.pgrad }, "ograd": { "S": req.body.ograd }, "experience": { "S": exp }, "linkedin": { "S": req.body.linkedin }, "terms": { "S": tandc } } } } ] } } 

Esta es la respuesta correcta, hay algunos problemas de tipo.

  var createuser = { "RequestItems": { "users": [{ "PutRequest": { Item: { "userid": { "S": usrid +"" }, "password": { "S": vucrypt.encryptpass(pass) +"" }, "role": { "S": 'candidate' +"" } } } }], "candidate": [{ "PutRequest": { Item: { "ccode": { "S": req.body.ccode +"" }, "fname": { "S": req.body.fname +"" }, "lname": { "S": req.body.lname +"" }, "pgrad": { "S": req.body.pgrad +"" }, "videoresumeurl": { "S": "-" }, "phone": { "S": req.body.phone +"" }, "terms": { "S": tandc +"" }, "location": { "S": req.body.location +"" }, "experience": { "N": req.body.experience +"" }, "userid": { "S": usrid +"" }, "grad": { "S": req.body.grad +"" } } } }] } }