dynamodb查询ExpressionAttributeValues javascript

时间:2017-10-17 02:12:33

标签: javascript amazon-dynamodb

嘿伙计们,所以我试图在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;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

查询API不允许大于运算符的哈希键属性。

两种方法: -

1)重新设计GSI以使Checkdate作为排序键而不是散列键。在这种情况下,您可能需要将另一个属性定义为哈希键。此外,您需要在KeyConditionExpression中包含哈希键。我不确定这是否会满足您的用例场景。但是,如果要避免全表扫描并使用查询API,则需要哈希键值。如果没有哈希键值,则无法使用查询API。

KeyConditionExpression: 'somenewhashkey = :hashkey AND Checkdate > :checkdate',

2)将Scan API与FilterExpression

一起使用
FilterExpression: "Checkdate > :checkdate",

请注意,这将执行全表或索引扫描,这是一项代价高昂的操作