DynamoDb 如何查询全局二级索引? [英] DynamoDb how to query a Global Secondary Index?

查看:39
本文介绍了DynamoDb 如何查询全局二级索引?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆