从 DynamoDB 查询多个项目

Mic*_*lak 1 amazon-web-services node.js amazon-dynamodb aws-lambda

我正在 AWS 中设计一个简单的无服务器应用程序:API Gateway-> Lambda (node.js) -> DynamoDB。

我想将客户数量保留在同一张桌子和相应的项目中,例如

Client_id,编号,项目,价格

0001, 1, 盒子, 10

0001, 2, 表, 100

0002, 1, 椅子, 20

0003, 1, 灯, 15

我选择 Primary Key = Client_id 和 Sort Key = no,目前我可以使用“dynamodb.get”函数获取单个项目,但在获取一个客户端的所有项目时遇到问题。我尝试使用“dynomodb.batchget”,但我需要知道表中有多少项目并可能进行一些循环。也许有不同的方式可以从单个客户那里获取所有项目?


const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports.get2 = (event, context, callback) => {

    var params = {
        "RequestItems": {
            "items": {
                "Keys": [{
                        id: Number(event.pathParameters.id),
                        no: 1
                    },
                    {
                        id: Number(event.pathParameters.id),
                        no: 2
                    }
                ]
            }
        },
        "ReturnConsumedCapacity": "TOTAL"
    };

    dynamoDb.batchGet(params, function(err, data) {
        if (err) {
            console.error(err);
            callback(null, {
                statusCode: err.statusCode || 501,
                headers: { 'Content-Type': 'text/plain' },
                body: 'Couldn\'t fetch the item.',
            });
            return;
        }
        const response = {
            statusCode: 200,
            body: JSON.stringify(data),
        };
        callback(null, response);
    });
};```
Run Code Online (Sandbox Code Playgroud)

jar*_*mod 5

要查找给定 的所有记录Client_id,请使用query. 下面是一个例子:

const AWS = require("aws-sdk");

AWS.config.update({region: 'us-east-1'});

const params = {
  TableName: 'mytable',
  KeyConditionExpression: 'Client_id = :Client_id',
  ExpressionAttributeValues: {
    ':Client_id': '0001',
  },
};

const dc = new AWS.DynamoDB.DocumentClient();

dc.query(params, (err, data) => {
  if (err) {
    console.log('Error', err);
  } else {
    for (const item of data.Items) {
      console.log('item:', item);
    };
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,如果您事先知道所需项目的完整(分区和排序)键(而不是具有给定分区键的所有项目),那么您可以使用batchGetItem.

此外,请考虑使用SDK 函数的承诺变体