我正在AWS中设计一个简单的无服务器应用程序:API Gateway-> Lambda(node.js)-> DynamoDB。
我想在同一张表和与之对应的项目中保留客户数量
Client_id,否,商品,价格
0001,1,盒,10
0001,2,桌子,100
0002,1,椅子,20
0003、1,灯,15
我选择主键= Client_id,排序键=否,目前我可以使用“ 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);
});
};```
答案 0 :(得分:2)
要查找给定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函数的promisified variants。