[英]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_date
和end_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.