Amazon dynamodb dynamoDB-通过主键数组从数据库中获取多个项

Amazon dynamodb dynamoDB-通过主键数组从数据库中获取多个项,amazon-dynamodb,aws-sdk,Amazon Dynamodb,Aws Sdk,我有一个用户id数组,我想从dynamoDB表中获取所有具有该id的用户 在文档中没有找到它 有什么想法吗?您可以为此使用BatchGetItem API 当然,在不了解表模式的情况下,我无法帮助您处理任何代码片段。但是您可以查看文档。我最终使用了batchGet,一种 不支持具有相同密钥的多个项目,因此我必须反复定义密钥,如下所示: var dynamoConfig = { sessionToken: process.env.AWS_SESSION_TOKEN, region:

我有一个用户id数组,我想从dynamoDB表中获取所有具有该id的用户

在文档中没有找到它


有什么想法吗?

您可以为此使用BatchGetItem API


当然,在不了解表模式的情况下,我无法帮助您处理任何代码片段。但是您可以查看文档。

我最终使用了batchGet,一种

不支持具有相同密钥的多个项目,因此我必须反复定义密钥,如下所示:

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);

});
您可能可以使用这个方法

我目前正在使用python包。因此,代码如下所示:

table = boto3.resourse('dynamodb').Table('users-table-name')
response = table.scan(
    ScanFilter={'user-id': {
        'AttributeValueList': user_ids,
        'ComparisonOperator': 'IN' }
    }
)
但我不确定使用
BatchGetItem
Scan
有什么更好。这可能取决于两个因素:

  • 表中有多少条记录(
    table.item\u count
  • 需要获取多少项(
    计数(用户ID)

  • 如果
    count(user_id)1
    ,那么您需要使用
    Scan

    在您的案例中,什么是用于查询评估器的参数?params?如果知道要查找的项目id,请避免扫描操作。执行它们的成本很高,因为必须扫描完整的数据集(可能跨分区)。