我在AWS中设计了一个简单的无服务器应用程序: API > Lambda (node.js) -> DynamoDB。
我想把顾客的数量放在同一张桌子上,并与其他物品保持一致。
Client_id,不,商品,价格
0001,1,方框,10
0001,2,表,100
0002,1,主席,20
0003,1,灯,15
我选择了主键= Client_id和排序键= 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);
});
};```
发布于 2019-09-23 09:49:24
若要查找给定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。
https://stackoverflow.com/questions/58065654
复制