首页 > 解决方案 > AWS DynamoDB 扫描操作适用于类级别扫描,但不适用于文档写入器扫描

问题描述

以下参数使用扫描操作返回预期结果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
};

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

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

关于为什么的任何想法?

标签: javascriptnode.jsamazon-web-servicesamazon-dynamodb

解决方案


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

javascript 中的 DynamoDB 文档客户端使用 javascript 类型,因此看到了start_dateand end_dateobjects( [object]) aka operand type: M

我所要做的就是ExpressionAttributeValues改变

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

瞧,它有效。


推荐阅读