【问题标题】:DynamoDB. I just want to list items动态数据库。我只想列出项目
【发布时间】:2018-09-29 21:38:52
【问题描述】:

我目前正在通过非常有用的Serverless Stack Tutorial 工作。在本教程中,创建了一个到 DynamoDB 的 AWS Lambda API,端点称为“create”、“get”、“list”等。

尝试在我自己的项目中实现“get”功能效果很好。 (这个函数使用dynamoDbLib.call("get", params);操作(我不明白为什么它不应该是getItem,就像Documentation一样)我正在使用这个chapter的模板和这个chapter的lib文件. 但尝试使用 batchgetBatchGetItem 会导致以下错误消息:dynamoDb[action] is not a function

只是为了说明我的意图:我只想列出我表中的所有项目(并且可能稍后指定一系列主键值)。我尝试调整tutorial 的“列表”功能,但“查询”操作似乎不合适,因为"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 }));
    }
}

感谢您的支持和反馈,但请不要批评我,因为我认为自己是菜鸟!

祝你有美好的一天!

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb serverless-framework serverless


    【解决方案1】:

    首先需要注意的是DocumentClientAWS.DynamoDB不同

    文档说:

    文档客户端简化了对 Amazon DynamoDB 中项目的处理 通过抽象出属性值的概念。

    dynamoDb[action] is not a function - 表示它没有该功能(由于区分大小写,请尝试添加batchGet)。

    我浏览了文档,发现文档documentclient支持这个功能:

    • batchGet(参数,回调)
    • batchWrite(参数,回调)
    • createSet(列表,选项)
    • 删除(参数,回调)
    • 获取(参数,回调)
    • put(参数,回调)
    • 查询(参数,回调)
    • 扫描(参数,回调)
    • 更新(参数,回调)

    来自: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 }));
    }
    

    希望这会对您有所帮助。如果您有任何其他问题,请随时询问。

    【讨论】:

    • 一切都清楚了!多谢。顺便说一句,过滤也有效
    • 你能帮我找资源吗?我未能将我的查询带入我的 API 函数。 Serverless Stack 教程只展示了如何使用 pathParameters。
    • 您好,如果您能提供有关该问题的更多详细信息,我可以为您提供帮助。也许你可以提出一个关于你被困在哪里的问题。
    猜你喜欢
    • 2016-10-29
    • 2015-01-20
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多