Запрос нескольких элементов из DynamoDB - PullRequest
0 голосов
/ 23 сентября 2019

Я разрабатываю простое безсерверное приложение в 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, и в настоящее время я могу получить один элемент с помощью функции «dynamicodb.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);
    });
};```

1 Ответ

2 голосов
/ 23 сентября 2019

Чтобы найти все записи для данного 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...