DynamoDB.Я просто хочу перечислить предметы - PullRequest
0 голосов
/ 28 сентября 2018

В настоящее время я прорабатываю очень полезное Обучающее руководство по стеку без серверов .В этом учебном пособии создается API-интерфейс AWS Lambda для DynamoDB с конечными точками под названием «create», «get», «list» и т. Д.

Попытка реализовать функцию «get» в моем собственном проектеработал нормально.(Эта функция использует операцию dynamoDbLib.call("get", params); (я не понимаю, почему она не должна быть getItem, как в Документация ). Я использую шаблон этой главы иlib-файлы этой главы . Но попытка использовать вместо нее batchget или BatchGetItem приводит к следующему сообщению об ошибке: dynamoDb[action] is not a function.

Просто чтобы прояснить мое намерение:Я просто хочу перечислить все элементы моей таблицы (и, возможно, позже укажу диапазон значений первичного ключа). Я попытался адаптировать функцию "list" из учебника , но действие "query" некажется подходящим, так как "KeyConditionExpression": "string", позволяет сравнивать только первичные ключи с оператором равенства (=). (Хотя ключи сортировки можно запрашивать с помощью a between b and c).

Есть ли у вас какие-либопредложения о том, как мне поступить? Оператор BatchGetItem не идеален, так как я должен указывать элементы в виде массива, а не числового диапазона!

Наконец, это последний статус кода:

    import * as dynamoDbLib from "./libs/dynamodb-lib";
import { success, failure } from "./libs/response-lib";

export async function main(event, context, callback) {
    var params = {
        "RequestItems" : {
            "my-table-name" : {
                "ConsistentRead":false,
                "Keys":[{
                    "id":{
                        "N":"1",
                        "N":"2"
                    }
                }]

        }
        }


    };

    try {
        const result = await dynamoDbLib.call("BatchGet", params);
        if (result.Item) {
            // Return the retrieved item
            callback(null, success(result.Item));
        } else {
            callback(null, failure({ status: false, error: "Item not found." }));
        }
    } catch (e) {
        console.log(e);
        callback(null, failure({ status: false }));
    }
}

Спасибо заподдержка и обратная связь, но не критикуйте меня слишком сильно, поскольку я считаю себя нубом!

Хорошего дня!

1 Ответ

0 голосов
/ 28 сентября 2018

Первое, на чем вам нужно сосредоточиться, это DocumentClient отличается от AWS.DynamoDB

, в документации сказано:

Клиент документов упрощает работу с элементами в Amazon DynamoDB благодаряабстрагируясь от понятия значений атрибутов.

dynamoDb[action] is not a function - означает, что у него нет этой функции (попробуйте добавить batchGet вместо этого, поскольку чувствительность к регистру).

Iпросмотрел документацию и обнаружил, что документация documentclient поддерживает следующие функции:

  • batchGet (params, callback)
  • batchWrite (params, callback)
  • createSet (список, опции)
  • delete (params, callback)
  • get (params, callback)
  • put (params, callback)
  • query (params,обратный вызов)
  • сканирование (параметры, обратный вызов)
  • обновление (параметры, обратный вызов)

из: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html

для получениясписок предметов и взять только нужные свойства, вы можете использовать scan.

const params = {
  ProjectionExpression: 'id, name', // fields you need
  TableName: 'table_name'
};

try {
  const result = await dynamoDbLib.call("scan", params);
  // Return the list of items in response body
  callback(null, success(result.Items));
} catch (e) {
  callback(null, failure({ status: false }));
}

надеюсь, это поможет вам.не стесняйтесь спрашивать, если у вас есть какие-либо дополнительные вопросы.

...