簡體   English   中英

從 DynamoDB 查詢多個項目

[英]Query multiple items from DynamoDB

我正在 AWS 中設計一個簡單的無服務器應用程序:API Gateway-> Lambda (node.js) -> DynamoDB。

我想將客戶數量保持在同一張桌子和相應的項目中,例如

Client_id, no, item, price

0001, 1, 盒子, 10

0001, 2, 表格, 100

0002, 1, 椅子, 20

0003, 1, 燈, 15

我選擇 Primary Key = Client_id 和 Sort Key = no,目前我可以使用“dynamodb.get”function 獲取單個項目,但在為一個客戶獲取所有項目時遇到問題。 我嘗試使用“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);
    });
};```

要查找給定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);
    };
  }
});

但是,如果您事先知道所需項目的完整(分區和排序)鍵(而不是具有給定分區鍵的所有項目),那么您可以使用batchGetItem

此外,請考慮使用 SDK 函數的承諾變體

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM