dynamoDB - 通过主键数组从DB获取多个项目

时间:2015-12-29 10:04:27

标签: amazon-dynamodb aws-sdk

我有一组用户ID,我希望从dynamoDB表中获取具有该id的所有用户

未在文档

中找到它

任何想法?

3 个答案:

答案 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' }
    }
)

但我不确定哪个更好,使用BatchGetItemScan。可能它取决于两个因素:

  1. 表格中的记录数(table.item_count
  2. 您需要获得多少件物品(count(user_ids)
  3. 如果count(user_ids) << table.item_count,您肯定需要使用BatchGetItem

    如果count(user_ids) / table.item_count -> 1,则需要使用Scan