我是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' },
],
我已阅读文档here,here,here以及其他许多信息,但仍无法理解如何通过他/她的名字查询用户。
所以,在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个全局第二个索引,我该如何执行查询?
有可能吗?
答案 0 :(得分:1)
您无法直接查询不是哈希键的字段。您必须使用scan
与filter
上的name
一样
var params = {
TableName: 'Users',
FilterExpression: '#u_name = :value',
ExpressionAttributeNames: {
'#u_name': 'name'
},
ExpressionAttributeValues: {
':value': 'Mykhaylo'
},
};
docClient.scan(params, function(err, data) {
////////
});
获取结果
答案 1 :(得分:0)
您可以通过以下操作对dynamodb运行sql查询:
pip install dql
dql -r eu-west-2
scan * from table_name;