我在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
未被识别为全局表。所以我的问题是,列出操作清单:
哪些支持GSI和LSI?而且,如果您想使用GSI检索一个特定项目,您应该使用哪个操作?如果我使用query
,我实际上是在尽可能快/便宜吗?
答案 0 :(得分:1)
Secondary indexes仅适用于Query
和Scan
操作。因此,如果您必须使用全局(或本地)二级索引,那么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];
}
});