Как выразить числовой тип в ExpressionAttributeValues, используя AWS.DynamoDB.DocumentClient - PullRequest
0 голосов
/ 18 января 2019

Я выполняю запрос от AWS Lambda к таблице DynamoDB. При использовании AWS.DynamoDB.DocumentClient он не может правильно преобразовать тип данных «N». Я получаю сообщение об ошибке «ValidationException: одно или несколько значений параметров недопустимы: тип параметра условия не соответствует типу схемы». Когда я использую AWS.DynamoDB и явно указываю тип «N», запрос работает. Оба значения «события» являются строками.

Я бы предпочел использовать AWS.DynamoDB.DocumentClient. Какие-либо предложения?

-> НЕ РАБОТАЕТ

let dynamodb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});

let params2 = {
    TableName: "TABLENAME",
    KeyConditionExpression: "#o = :owner and #s = :sortkey",
    ExpressionAttributeNames: {
        "#o" : "owner",
        "#s" : "sortkey
    },
    ExpressionAttributeValues: {
        ":owner" : event.userId,
        ":sortkey" : event.objPartitionKey
        }
    };
     const data = await dynamodb.query(params2).promise();

-> РАБОТАЕТ

    let ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

    // configure the dynamoDb query parameters
    let params = {
        TableName: "TABLENAME",
        KeyConditionExpression: "#o = :owner and #s = :sortkey",
        ExpressionAttributeNames: {
            "#o" : "owner",
            "#s" : "sortkey"
        },
        ExpressionAttributeValues: {
            ":owner" : {S: event.userId},
            ":sortkey" : {N: event.objPartitionKey}
        }
    };
     const data = await ddb.query(params).promise();

1 Ответ

0 голосов
/ 18 января 2019

DynamoDB DocumentClient использует типы javascript, чтобы определить, какой тип DynamoDB нужно маршалировать. Я могу только предположить, что event.objPartitionKey является строкой JavaScript. Это должен быть номер JavaScript для правильного маршалинга в поле типа N «DynamoDB». Чтобы заставить работать первый фрагмент кода, сначала преобразуйте event.objPartitionKey в число, используя: parseInt(event.objPartitionKey)

См. Документацию AWS, чтобы понять, как DocumentClient маршаллизирует типы JS к типам DynamoDB: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...