У меня есть таблица под названием Message in Dynamodb. Ключ состоит из Hash (называемого entryStamp как Number) и Range (userId как String).
Я пытаюсь сделать на нем getItem с помощью Node.js Lambda. Я знаю, как получить элемент для другой таблицы с ключом Hash only, и это работает.
Но я не могу найти документацию о том, как изменить мой json, чтобы выразить часть ключа Range.
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);
}
};
Вот информация в таблице на вкладке «Подробности» DynamoDB:
Table Name: Message
Primary Hash Key: entryStamp (Number)
Primary Range Key: userId (String)
Table Status: Active
Вот что я передаю в event.messageId:
{
"messageId": "1443768744451-testUser"
}
Заранее спасибо! Когда я отправляю это в getItem, я получаю следующее:
{
"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)"
]
}
desiredSendStamp
иuserId
в этом примере? Не могли бы вы также поделиться определением атрибута таблицы дляMessage
таблицы? - person mkobit   schedule 02.10.2015