J'ai une table appelée Message dans dynamodb. La clé est composée d'un Hash (appelé entryStamp en tant que Number) et d'un Range (userId en tant que String). J'essaie de faire un getItem à l'aide de Node.js Lambda. Je sais comment getItem pour une table différente avec une clé de hachage seulement, et cela fonctionne.Comment exprimer une plage Hash + dans JSON pour dynamodb getItem sur Node.js
Mais je ne trouve pas de documentation sur la façon de modifier mon json pour exprimer la partie Range de la touche.
var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();
exports.handler = function(event, context) {
var messageIdParts = event.messageId.split("-");
var desiredStampString = messageIdParts[0];
var desiredSendStamp = Number(desiredStampString);
var userId = messageIdParts[1];
var params = {
"ConsistentRead": false,
"Key": {
HashKeyElement: { "entryStamp": desiredSendStamp },
RangeKeyElement: { "userId": userId }
},
"ProjectionExpression": "message",
"ReturnConsumedCapacity": "NONE",
"TableName": "Message"
}
try {
dynamo.getItem(params, context.done);
} catch (e) {
console.log("Exception for getItem: " + e);
}
};
est ici l'info sur la table de l'DynamoDB onglet "Détails":
Table Name: Message
Primary Hash Key: entryStamp (Number)
Primary Range Key: userId (String)
Table Status: Active
Voici ce que je passe à event.messageId:
{
"messageId": "1443768744451-testUser"
}
Merci à l'avance! Lorsque j'envoie ci-dessus à getItem, je reçois ceci:
{
"errorMessage": "The provided key element does not match the schema",
"errorType": "ValidationException",
"stackTrace": [
"Request.extractError (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/protocol/json.js:40:27)",
"Request.callListeners (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/sequential_executor.js:100:18)",
"Request.emit (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
"Request.emit (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/request.js:604:14)",
"Request.transition (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/request.js:21:12)",
"AcceptorStateMachine.runTo (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/state_machine.js:14:12)",
"/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/state_machine.js:26:10",
"Request.<anonymous> (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/request.js:22:9)",
"Request.<anonymous> (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/request.js:606:12)",
"Request.callListeners (/var/runtime/node_modules/dynamodb-doc/node_modules/aws-sdk/lib/sequential_executor.js:104:18)"
]
}
Pourriez-vous également partager la définition d'attribut de table pour la table 'Message'? – mkobit
semble correct. Êtes-vous sûr que la clé de hachage est N et que userId est une chaîne (S)? – Mircea