AWS Lambda для динамического чтения пользовательского ввода и возврата данных из таблицы Dynamo

Лямбда дает ожидаемый результат только тогда, когда я передаю значение вручную (Id = '011010').

В функции шага значение идентификатора значения будет случайным на основе логики предыдущего шага, поскольку значение идентификатора не является статическим, как обрабатывать этот сценарий ExpressionAttributeValues

Я попробовал весь приведенный ниже синтаксис, но безуспешно ..

ExpressionAttributeValues: { ':value':  $.External.Id}   
ExpressionAttributeValues: { ':value':  External.Id.$}   
ExpressionAttributeValues: { ':value':  $.Id}   
ExpressionAttributeValues: { ':value':  Id.$}   
ExpressionAttributeValues: { ':value':  event.Id}

Лямбда-код

   'use strict'
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();

 
var params = {
 TableName: 'temptable',
 IndexName: 'Id-CurrentStatus-index',
 KeyConditionExpression: '#Id= :value',
 ExpressionAttributeNames: { '#Id': 'Id'},
 ExpressionAttributeValues: { ':value': 'M1' }
       
};

async function queryItems(){
 try {
   const data = await docClient.query(params).promise()
   return data
 } catch (err) {
   return err
 }
}

exports.handler = async (event, context) => {
 try {
   const data = await queryItems()
   return { body: JSON.stringify(data) }
 } catch (err) {
   return { error: err }
 }
}

Я могу прочитать это из

   console.log("Memberid :" + JSON.stringify(event.Id, null, 2))

но как передать то же значение в

    ExpressionAttributeValues: { ':value': 'M1' } 

Я попробовал приведенный ниже синтаксис. ничего не работает

    ExpressionAttributeValues: { ':value': JSON.stringify(event.Id, null, 2) }
    ExpressionAttributeValues: { ':value': event.Id}
    ExpressionAttributeValues: { ':value': event.Id}
    ExpressionAttributeValues: { ':value': Id} 

person SQLMike    schedule 14.05.2021    source источник
comment
Попробуйте добавить .$ в конец свойства, которое вы пытаетесь просмотреть. ExpressionAttributeValues: { ':value.$': $.External.Id}   -  person Jason Wadsworth    schedule 15.05.2021
comment
Ответ: тело: {\ message \: \ ExpressionAttributeValues ​​содержит недопустимый ключ: синтаксическая ошибка; ключ: \\\: значение. $ \\\\   -  person SQLMike    schedule 15.05.2021
comment
Любые люди помощи?   -  person SQLMike    schedule 16.05.2021
comment
Я неправильно понял твой вопрос. Можете показать пошаговый ввод? Если это не экспресс-пошаговая функция, вы можете просмотреть ее в консоли. Для экспресс-функций необходимо включить ведение журнала.   -  person Jason Wadsworth    schedule 16.05.2021
comment
@JasonWadsworth Это не экспресс-функция. console.log работает, но я не уверен, как перейти внутрь ExpressionAttributeValues, я обновил вопрос с дополнительным исследованием. Пожалуйста, проверьте. Заранее спасибо.   -  person SQLMike    schedule 16.05.2021
comment
Если значение находится в event.Id, тогда ExpressionAttributeValues: { ':value': event.Id } должно работать. Если нет, не могли бы вы предоставить дополнительную информацию? Какую ошибку вы получаете? Как выглядит определение таблицы? Некоторые образцы данных были бы полезны.   -  person Jason Wadsworth    schedule 17.05.2021


Ответы (1)


Я получил требуемый код после проверки нескольких потоков.

Функция AWS Lambda для сканирования / запросить таблицу DynamoDB, используя значения массива как FilterExpression

'use strict'

var AWS = require('aws-sdk');
var mydocumentClient = new AWS.DynamoDB.DocumentClient();

exports.handler = function (event, context, callback) {

    var params = {
        TableName: 'temptable',
        KeyConditionExpression : 'Id= :Id',
        FilterExpression : 'Id in (:Id)',
            ExpressionAttributeValues: {
            ":Id": event.Id
        }

    };
    
      
      mydocumentClient.scan(params, function (err, data){
        if (err) {
            callback(err, null);
        }else{
          callback(null, data);
        }
    })

}
person SQLMike    schedule 17.05.2021
comment
В большинстве случаев следует избегать использования операции scan. Это определенно не то, что вы хотите использовать для получения небольшого набора данных из вашей таблицы. - person Jason Wadsworth; 17.05.2021
comment
Спасибо, но это единственный доступный вариант - person SQLMike; 04.06.2021
comment
Думали ли вы о добавлении GSI в таблицу? Для простого выражения, которое вы используете, это было бы намного эффективнее. - person Jason Wadsworth; 04.06.2021