我有dynamoDB表,
表名xx
主分区键id
(号码)
主要排序键name
(字符串)
我想通过name
查询。
'use strict';
const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB();
const docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = function(event, ctx, callback) {
var params = {
TableName: 'xx',
KeyConditionExpression: "#name = :name",
ExpressionAttributeNames:{
"#name": "name"
},
ExpressionAttributeValues: {
":name":event.name
}
};
docClient.query(params, function(err, data){
if(err){
callback(err, null);
}else{
callback(null, data);
}
});
}
但我收到一个错误:"查询条件错过了关键架构元素:id:"怎么处理?
答案 0 :(得分:6)
DynamoDB是NoSQL数据库,因此您只能默认查询主键。你有几个选择:
创建全局二级索引并对其进行查询(Link):
“全局二级索引包含基表中的一系列属性,但它们由一个与表的主键不同的主键组织。索引键不需要具有来自表的任何键属性。 table;它甚至不需要具有与表相同的密钥模式。“
扫描而不是查询:
var params= {
TableName:'xx',
ProjectionExpression:'name', // remove this string if you want to get not only 'name'
FilterExpression:'name = :name',
ExpressionAttributeValues:{ ":name" : event.name }
};
docClient.scan(params, function(err, data){
if(err){
callback(err, null);
}else{
callback(null, data);
}
});
如果您的表格不会很大,扫描是更容易和更便宜的方式(我相信全球二级指标有相关成本),但“正确”的方法是使用全球二级指数。< / p>