我有一组用户ID,我希望从dynamoDB表中获取具有该id的所有用户
未在文档
中找到它任何想法?
答案 0 :(得分:4)
我最终使用了batchGet,这是AWS.DynamoDB.DocumentClient
的一个操作不支持具有相同密钥的多个项目,因此我必须一遍又一遍地定义密钥:
var dynamoConfig = {
sessionToken: process.env.AWS_SESSION_TOKEN,
region: process.env.AWS_REGION
};
var dynamodbDocClient = new AWS.DynamoDB.DocumentClient(dynamoConfig);
var params = {
RequestItems: {
tableName: {
Keys: [
{
id: 'user1Id'
},
{
id: 'user2Id'
},
{
id: 'user3Id'
}
]
}
}
}
dynamodbDocClient.batchGet(paramsForQueringFormerEvaluators, function(err, data) {
if (err) {
console.log('createEvaluation: get former evaluators: err: ', err);
return;
}
var users = data.Responses.tableName;
console.log('createEvaluation: get former evaluators: ', users);
});
答案 1 :(得分:3)
您可以使用BatchGetItem API。
当然,在不知道您的表架构的情况下,我无法帮助您处理任何代码段。但您可以查看文档here。
答案 2 :(得分:3)
您可以使用Scan
方法。
我目前正在使用python boto3
包。 Ref to scan
in boto3。所以代码就像:
table = boto3.resourse('dynamodb').Table('users-table-name')
response = table.scan(
ScanFilter={'user-id': {
'AttributeValueList': user_ids,
'ComparisonOperator': 'IN' }
}
)
但我不确定哪个更好,使用BatchGetItem
或Scan
。可能它取决于两个因素:
table.item_count
)count(user_ids)
)如果count(user_ids) << table.item_count
,您肯定需要使用BatchGetItem
。
如果count(user_ids) / table.item_count -> 1
,则需要使用Scan
。