gpt4 book ai didi

node.js - 从 DynamoDB 查询多个项目

转载 作者:行者123 更新时间:2023-12-05 01:39:34 28 4
gpt4 key购买 nike

我正在 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”函数获取单个项目,但在为一个客户获取所有项目时遇到问题。我尝试使用“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

此外,请考虑使用 promisified variants SDK 功能。

关于node.js - 从 DynamoDB 查询多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58065654/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com