如何使用Dynamodb中的全局二级索引检索单个项目?

时间:2018-02-01 20:42:19

标签: amazon-web-services amazon-dynamodb

我在Dynamodb中有一个表,我试图通过命名全局二级索引来获取一个项目(使用docClient.get),但我收到错误:

The provided key element does not match the schema

这是我的疑问:

docClient
    .get({
      TableName: 'table',,
      IndexName: 'gsi_table',
      Key: { primary_key }
    })

但后来我查看了get documentation并且它没有IndexName属性。所以我想也许我应该命名GSI而不是表名:

docClient
    .get({
      TableName: 'gsi_table',
      Key: { primary_key }
    })

但后来我遇到了:

Requested resource not found

表示gsi_table未被识别为全局表。所以我的问题是,列出操作清单:

  • batchGet
  • batchWrite
  • createSet
  • 删除
  • 获得
  • 查询
  • 扫描
  • 更新

哪些支持GSI和LSI?而且,如果您想使用GSI检索一个特定项目,您应该使用哪个操作?如果我使用query,我实际上是在尽可能快/便宜吗?

1 个答案:

答案 0 :(得分:1)

Secondary indexes仅适用于QueryScan操作。因此,如果您必须使用全局(或本地)二级索引,那么Query当然会比Scan更快。

访问您的"单身" item,您可以使用data.Items[0]。例如:

const params = {
    TableName: "TABLE_NAME",
    IndexName: "INDEX_NAME",
    KeyConditionExpression: "INDEX_KEY = :k",
    ExpressionAttributeValues: {
        ":k": some_value
    }
};

docClient.query(params, (err, data) => {
    if (err) {
        console.log(err);
    } else {
        const myItem = data.Items[0];
    }
});