javascript - dynamodb 查询 ExpressionAttributeValues javascript

标签 javascript amazon-dynamodb

大家好,我正在尝试查询我的 dynamo 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);
};

最佳答案

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

两种方法:-

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

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

2) 将扫描 API 与 FilterExpression 一起使用

FilterExpression: "Checkdate > :checkdate",

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

关于javascript - dynamodb 查询 ExpressionAttributeValues javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46781490/

相关文章:

javascript - 是否可以仅使用 CSS 保持垂直节奏?

javascript - 无法从子目录中找到模块 windows 10

json - 将 Dynamo Document.Item 迁移到 aws-sdk-java-v2

java - 使用 java 访问 dynamoDB(本地)时无法加载 AWS 凭证错误

amazon-web-services - 跨区域 DynamoDB 访问

javascript - 如何调试使用 iPhone 上的 GPS 的 JavaScript?

javascript - 将记录重新插入 extJS 存储

javascript - 如何循环遍历具有特定条件的对象并返回其值的数组?

jackson - 是否有将 Dynamo Db Map<String ,AttributeValue> 映射到对象的库?

locking - DynamoDB 默认有锁定吗?