DynamoDb 如何查询全局二级索引? [英] DynamoDb how to query a Global Secondary Index?
问题描述
我在 Em(代表电子邮件)处创建了一个带有全局二级索引的表.
I have created a table as following with a Global Secondary Index at Em (representing email).
TableName : "Users",
KeySchema: [
{ AttributeName: "Ai", KeyType: "HASH"}, //Partition key
{ AttributeName: "Ui", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "Ai", AttributeType: "S" },
{ AttributeName: "Ui", AttributeType: "S" },
{ AttributeName: "Em", AttributeType: "S" }
],
GlobalSecondaryIndexes: [
{
IndexName: 'EmailIndex',
KeySchema: [
{ AttributeName: 'Em', KeyType: "HASH" },
],
Projection: {
ProjectionType: 'ALL'
},
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
}
从我的 node.js SDK 中,我尝试使用 EmailIndex 查询表,如下所示:
From my the node.js SDK I am trying to query the table with the EmailIndex as following:
const params = {
TableName: 'Users',
IndexName: 'EmailIndex',
Key: {
Em: email
}
}
try {
const data = await docClient.get(params).promise()
return data
} catch (error) {
throw error
}
我收到如下回复:
{
"message": "The number of conditions on the keys is invalid",
"code": "ValidationException",
"time": "2018-07-02T10:33:13.313Z",
"requestId": "edc5f2e0-3c2b-4354-9342-4a96c74988a6",
"statusCode": 400,
"retryable": false,
"retryDelay": 17.366914444025173
}
我正在尝试从电子邮件地址获取数据.我做错了什么?
I am trying to get the data from the Email address. What am I doing wrong?
推荐答案
您需要对二级索引运行查询,而不是从表中读取的项目.
You need to run a query on the secondary index, not an item read from the table.
var email = "JoeBloggs@hotmail.com";
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName : "Users",
IndexName : "EmailIndex",
KeyConditionExpression: "#email = :v_email",
ExpressionAttributeNames:{
"#email": "Em"
},
ExpressionAttributeValues: {
":v_email": email
}
};
docClient.query(params, function(err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
data.Items.forEach(function(item) {
console.log(" -", item.Em + ": " + item.Ai);
});
}
查询数据 - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.04.html索引 - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html
Query Data - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.04.html Indexes - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html
这篇关于DynamoDb 如何查询全局二级索引?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!