繁体   English   中英

AWS DynamoDB 扫描操作适用于 Class 级别扫描,但不适用于文档编写器扫描

[英]AWS DynamoDB Scan Operation Works w/ Class Level Scan, but not Document Writer Scan

以下参数在使用dynamoDB.scan(params, function);

const dynamoDB = new AWS::DynamoDB();
let params = {
    TableName: ACCOUNT_USAGE_TABLE,
    ExpressionAttributeValues: {
        ":start_date": {
            S: new Date(event.start_date).toISOString(),
        },
        ":end_date": {
            S: new Date(event.end_date).toISOString()
        }
    },
    ExpressionAttributeNames: {
        "#usage_date": "date",
    },
    FilterExpression: "#usage_date BETWEEN :start_date AND :end_date",
    ExclusiveStartKey: event.LastEvaluatedKey
};

但是当使用dynamoDB.documentClient.scan(params, function)时,前面的参数失败,

ValidationException: Invalid FilterExpression: Incorrect operand type for operator or function; operator or function: BETWEEN, operand type: M

关于为什么的任何想法?

当然,答案是直接盯着我的脸。 以防其他人遇到它并且没有立即看到它。

javascript 中的 DynamoDB 文档客户端使用 javascript 类型,因此看到start_dateend_date对象( [object] )又名operand type: M

我所要做的就是将ExpressionAttributeValues更改为

ExpressionAttributeValues: {
    ":start_date": new Date(event.start_date).toISOString(),
    ":end_date": new Date(event.end_date).toISOString()
},

瞧,它有效。

下面的代码适用于我的场景,可以在两个日期之间进行查询。 我得到的错误是“无效的 FilterExpression:运算符或 function 的操作数类型不正确;运算符或 function:BETWEEN,操作数类型:M”。

let params = {
TableName: tableName,
ProjectionExpression:"Id, FirstName, LastName, #ProcessedFlag, #CreatedTimeStamp",
FilterExpression: '#CreatedTimeStamp BETWEEN :fromDateTime AND :toDateTime AND #ProcessedFlag = :flag',
ExpressionAttributeNames: {
  '#ProcessedFlag': processedFlagName,
  '#CreatedTimeStamp': createdTimeStampName,
},
ExpressionAttributeValues: {
  ':flag' : flag,
  ':fromDateTime' : new Date(fromDateTime).toISOString() ,
  ':toDateTime' : new Date(toDateTime).toISOString(),
}

};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM