首页 > 解决方案 > 如何从另一个表中查询和映射数据?

问题描述

我有 DynamoDB 表订单、产品和用户。

在订单中,我有prouctiduser_email

我想使用从订单表中获取每个产品详细信息productid

async function getUserOrders(id) {
  let params = {
    TableName: table_name_orders,
    IndexName: "UserEmail",
    KeyConditionExpression: "#email = :v_email",
    ExpressionAttributeNames: {
      "#email": "user_email",
    },
    ExpressionAttributeValues: {
      ":v_email": id,
    },
  };

  let allData = await dynamodb.query(params).promise();

  return buildResponse(200, allData.Items);
}

在此,我正在查询特定用户的所有订单,该订单具有指向产品的产品 ID,我想获取每个订单的每个产品数据,我该如何获取这些数据。

有没有像 populate(Mongodb) 这样的函数用数据填充数组中的每个项目?

标签: amazon-web-servicesaws-lambdaamazon-dynamodbdynamodb-queries

解决方案


您可以使用 DynamoDB batchGetItem API - https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html

java中的示例:-

// 产品表 hashKeys 列表

列表idList;

// 使用 Java SDK 进行 BatchGet

Map<String, TableName.class> 声明 = dynamoDBMapper.batchLoad(Collections.singletonMap(TableName.class, idList.stream().distinct() .map(i -> new KeyPair().withHashKey(i)).collect( Collectors.toList()))).get("").stream() .map(object -> (TableName class) object).collect(Collectors.toMap(Claim::getClaimId, Function.identity(), (i1 , i2) -> i2));


推荐阅读