无密钥查询数据(AWS DynamoDB SDK Nodejs)

时间:2016-08-18 20:22:11

标签: node.js amazon-web-services aws-sdk

我刚开始使用AWS Nodejs SDK For DynamoDb

我对如何在不使用分区密钥的情况下访问特定数据感到困惑。

让我们假设我的表中只有1个项目,其中包含属性" id"设置为我的分区键

表名:用户

{
  "full_name": {
    "S": "John Cena"
  },
  "id": {
    "S": "ABC123"
  },
  "password": {
    "S": "youcantseeme"
  },
  "username": {
    "S": "AndHisNameIs"
  }
}

如果我使用我的密钥

查询,下面的代码将返回我上方的对象

顺便说一句,我使用 dynamodb.query(params,function(err,data){}

使用密钥进行搜索

let params = {
    TableName : "Users",
    KeyConditionExpression: "#myid = :id",
    ExpressionAttributeNames:{
        "#myid": "id"
    },
    ExpressionAttributeValues: {
        ":id": {
            S: "ABC123"
        }
    }
};

在没有密钥的情况下搜索

- 如果我可以在不指定id字符串的情况下访问该数据,我希望如此。例如,如果用户发送了"用户名"和#34;密码"我没有身份证,所以我无法找到它。

- 下面的代码会返回一个错误,指出我错过了一个分区键" id"

let params = {
    TableName : "Users",
    ExpressionAttributeNames:{
        "#myusername": "username"
    },
    KeyConditionExpression: "#myusername = :username",
    ExpressionAttributeValues: {
        ":username": {
            S: "AndHisNameIs"
        }
    }
};

我的工作?

- 用username而不是id替换分区键?这是nosql数据库的工作原理吗?我来自一个mysql环境所以我只能通过在某个列中询问它来搜索特定的字符串或数字或布尔值lol

1 个答案:

答案 0 :(得分:2)

在要查询的字段中添加Global Secondary Index。或者进行全表扫描。