Amazon dynamodb AWS使用映射模板中的二级索引获取查询DynamoDB的api

Amazon dynamodb AWS使用映射模板中的二级索引获取查询DynamoDB的api,amazon-dynamodb,aws-api-gateway,Amazon Dynamodb,Aws Api Gateway,DyanmoDB表格详细信息 表名称:产品级 它有3列:产品(分区键)、颜色(排序键)、库存 需要仅使用颜色访问数据。为了实现这一点,我们正在创建一个关于颜色的二级索引。我想了解我们如何在api中进行更改 -它必须工作,如果我使用任何产品或颜色 目前,这是请求映射模板中的代码: "KeyConditionExpression": "PRODUCT = :a#if($input.params('color') != "") AND COLOR = :b#{end}", "ExpressionAtt

DyanmoDB表格详细信息 表名称:产品级 它有3列:产品(分区键)、颜色(排序键)、库存

需要仅使用颜色访问数据。为了实现这一点,我们正在创建一个关于颜色的二级索引。我想了解我们如何在api中进行更改

-它必须工作,如果我使用任何产品或颜色

目前,这是请求映射模板中的代码:

"KeyConditionExpression": "PRODUCT = :a#if($input.params('color') != "") AND COLOR = :b#{end}",
"ExpressionAttributeValues": {
    ":a": {"S": "$input.params('product')"}#if($input.params('color') != ""),
    ":b": {"S": "$input.params('color')"}#{end}
},

您需要在查询中指定辅助索引的名称

假设二级索引是在“颜色”上创建的,索引名称是“颜色索引”

查询应为:

{
    TableName: "Product_Level",
    IndexName: "COLOR-Index",
    KeyConditionExpression: "COLOR = :COLOR",
    ExpressionAttributeValues: {
        ":COLOR": COLOR
    }
};

如果要使用PRODUCT进行查询并按颜色过滤,则不需要创建二级索引。此查询应适用于以下情况:

{
    TableName: "Product_Level",
    KeyConditionExpression: "PRODUCT = :PRODUCT",
    FilterExpression: "contains (COLOR, :COLOR)",
    ExpressionAttributeValues: {
        ":PRODUCT": PRODUCT,
        ":COLOR" : COLOR
    }
}

因为您知道是否有“产品”和/或“颜色”(即,它们是单独的字段),所以可以使用产品分区、颜色排序和带有颜色分区的GSI存储数据。您需要根据获得的参数运行不同的查询

使用下面的数据,您可以运行以下查询以获取所需的数据

  • 只需查询其中的“Partition='ProductA'”即可获取所有“ProductA”
  • 通过查询GSI获取所有“蓝色”记录,其中“GSI_分区=‘蓝色’”
  • 使用指定产品和颜色键的
    GetItem
    获取“红色”“ProductA”记录

  • 如果您真的需要在一个查询中指定颜色或产品

    谢谢,Kevin。那么,KeyConditionExpression中的产品不是必需的?我应该能够查询使用产品也。
    Partition     Sort     GSI_Partition      Stock
    ProductA      Red      Red                ...
    ProductA      Blue     Blue               ...
    ProductB      Blue     Blue               ...