2016-08-18 76 views
1

我刚刚开始进入使用AWS的NodeJS SDK对于DynamoDb查询数据(AWS DynamoDB SDK的NodeJS)

我“马云对我如何可以访问特定的数据,而无需使用分区键有点糊涂。

我们只是假设我只有在我与属性“ID”设置为我的分区键

表名称表1项:用户

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

下面的代码将返回我上面的对象,如果我查询中使用我的钥匙

顺便说一下我使用dynamodb.query(参数,可以函数(ERR,数据){}

使用关键搜索

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

搜索无钥匙

-I想它,如果我可以在不指定id字符串的情况下访问这些数据。例如,如果用户发送“用户名”和“密码”,我不会拥有该ID,因此我无法查找它。下面

-The代码将返回一个错误,说明我缺少一个分区键“ID”

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

我的工作在吗?

- 用username而不是id替换分区键?这是如何nosql数据库的工作?我来自一个MySQL环境,所以我只是能够搜索一个特定的字符串或数字或布尔值只要求在某一列lol

回答

2

添加一个Global Secondary Index到您想要查询的字段。或者做一个全表扫描。

+0

如果你能为我清理一些东西。我阅读了文档,并说它包含索引名称。在我的情况下,“用户名”?或者是我在创建表时需要设置的东西。 –

+0

索引名称是您在创建全局二级索引时给予的名称。如果您还没有创建GSI,那么您显然还无法查询它。一旦你创建了它,你将不得不给它一个名字,这就是你将要使用的名字。如果您忘记了GSI的名称,则可以通过转到表并在“索引”选项卡下查看GSI,在DynamoDB控制台中查看它。 –

+0

谢谢你是我的问题的答案! –