嘿伙计们,所以我试图在checkdate列上查询我的发电机db GIS索引中的任何字符串是一年多了,所以我的问题是你如何构造KeyConditionExpression或ExpressionAttributeValues?任何帮助表示赞赏!请参阅以下代码:
console.log("Loading function");
var AWS = require('aws-sdk');
var lastyeartoday = new Date();
var dd = lastyeartoday.getDate();
var mm = lastyeartoday.getMonth()+1;
var yyyy = lastyeartoday.getFullYear()-1;
var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
var s3 = new AWS.S3();
function date(err, lastyeartoday) {
if(dd<10) {
dd = '0'+dd;
}
if(mm<10) {
mm = '0'+mm;
}
}
lastyeartoday = mm + '/' + dd + '/' + yyyy;
console.log(lastyeartoday);
exports.handler = function(data, context, callback) {
var params = {
TableName: "S3_log",
IndexName: "Checkdate-index",
"Select": "ALL_ATTRIBUTES",
KeyConditionExpression: 'Checkdate = :checkdate',
ExpressionAttributeValues: {
":checkdate": {S: lastyeartoday.toString()},
},
ScanIndexForward: true,
Limit: 1,
ConsistentRead: false,
ReturnConsumedCapacity: 'NONE',
};
ddb.query(params, function(err, data) {
if (err) {
callback(err, null);
} else {
return(null, data);
};
&#13;
答案 0 :(得分:2)
查询API不允许大于运算符的哈希键属性。
两种方法: -
1)重新设计GSI以使Checkdate
作为排序键而不是散列键。在这种情况下,您可能需要将另一个属性定义为哈希键。此外,您需要在KeyConditionExpression
中包含哈希键。我不确定这是否会满足您的用例场景。但是,如果要避免全表扫描并使用查询API,则需要哈希键值。如果没有哈希键值,则无法使用查询API。
KeyConditionExpression: 'somenewhashkey = :hashkey AND Checkdate > :checkdate',
2)将Scan API与FilterExpression
FilterExpression: "Checkdate > :checkdate",
请注意,这将执行全表或索引扫描,这是一项代价高昂的操作