查询AWS DynamoDB

时间:2018-03-14 11:23:48

标签: node.js amazon-web-services amazon-dynamodb

我是DynamoDB的新手,我无法了解查询的工作原理。
所以,就我而言,我有一个表(集合/ etc)Users,其中包含以下字段和AWS类型:
id [type String], name [type String], email[type String], ref_code[type Map], register_date[type String]
我的表索引是

KeySchema: [
  { AttributeName: 'id', KeyType: 'HASH' },
  { AttributeName: 'register_date', KeyType: 'RANGE' },
],
AttributeDefinitions: [
  { AttributeName: 'id', AttributeType: 'S' },
  { AttributeName: 'register_date', AttributeType: 'S' },
],

我已阅读文档hereherehere以及其他许多信息,但仍无法理解如何通过他/她的名字查询用户。
所以,在MySQL世界中,如果我在字段ID上有主索引,我仍然可以通过他/她的名字查询用户数据,例如SELECT * FROM users WHERE name = '<name>';
但是,这种行为不适用于DynamoDB 我试过这样查询:

var params = {
TableName: 'Users',
IndexName: 'name',
KeyConditionExpression: '#u_name = :name',
ProjectionExpression: '#u_name, lives, fb_account',
ExpressionAttributeNames: {
  '#u_name': 'name',
},
ExpressionAttributeValues: {
  ':name': 'Mykhaylo',
},
};

还有很多其他选择,但没有成功。
那么,我的问题是如何在AWS DynamoDB中进行查询?
修改
如果我需要设置超过5个全局第二个索引,我该如何执行查询?
有可能吗?

2 个答案:

答案 0 :(得分:1)

您无法直接查询不是哈希键的字段。您必须使用scanfilter上的name一样

var params = {
    TableName: 'Users',
    FilterExpression: '#u_name = :value',
    ExpressionAttributeNames: {
        '#u_name': 'name'
    },
    ExpressionAttributeValues: {
        ':value': 'Mykhaylo'
    },
};
docClient.scan(params, function(err, data) {
   ////////
});

您需要使用name hash key创建gsi。然后,您可以使用Query根据name

获取结果

答案 1 :(得分:0)

您可以通过以下操作对dynamodb运行sql查询:

  • 打开ubuntu bash
  • pip install dql
  • dql -r eu-west-2
  • scan * from table_name;