InvalidParameterType:预期 params.ExpressionAttributeValues[':et1'].N 为字符串

MD.*_*lam 3 amazon-dynamodb

这是我用来进行查询的代码:

var scanParams = {
        TableName : 'xxxx',
        FilterExpression : '( (event = :e0) AND (event = :e1 AND eventTime > :et1 AND eventTime < :et2) )',
        ExpressionAttributeValues: { 
          ':e0': { S: 'ME 21' },
          ':e1': { S: 'ME 21' },
          ':et1': { N: 1509267218 },
          ':et2': { N: 1509353618 } 
        },
        ProjectionExpression: "event, customer_id, visitor",
    };
Run Code Online (Sandbox Code Playgroud)

在相应 dynamodb 表的配置中,我似乎为 eventTime 列添加了 Number。

在此输入图像描述

这是错误:

error happened  { MultipleValidationErrors: There were 2 validation errors:
* InvalidParameterType: Expected params.ExpressionAttributeValues[':et1'].N to be a string
* InvalidParameterType: Expected params.ExpressionAttributeValues[':et2'].N to be a string
    at ParamValidator.validate (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/param_validator.js:40:28)
    at Request.VALIDATE_PARAMETERS (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/event_listeners.js:125:42)
    at Request.callListeners (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
    at callNextListener (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/sequential_executor.js:95:12)
    at /home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/event_listeners.js:85:9
    at finish (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/config.js:315:7)
    at /home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/config.js:333:9
    at SharedIniFileCredentials.get (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/credentials.js:126:7)
    at getAsyncCredentials (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/config.js:327:24)
    at Config.getCredentials (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/config.js:347:9)
    at Request.VALIDATE_CREDENTIALS (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/event_listeners.js:80:26)
    at Request.callListeners (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/sequential_executor.js:101:18)
    at Request.emit (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
    at Request.emit (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at Request.runTo (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/request.js:403:15)
    at /home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/request.js:791:12
    at Request.promise (/home/jahidul/workspace/backstage-opticon/node_modules/aws-sdk/lib/request.js:777:12)
    at DynamoDBService.scanItem (/home/jahidul/workspace/backstage-opticon/shared/services/dynamodb/dynamodb.service.ts:52:39)
    at /home/jahidul/workspace/backstage-opticon/job-scripts/dyno-test.js:57:12
    at sailsReady (/home/jahidul/workspace/backstage-opticon/node_modules/sails/lib/app/lift.js:49:12)
    at /home/jahidul/workspace/backstage-opticon/node_modules/async/lib/async.js:251:17
    at /home/jahidul/workspace/backstage-opticon/node_modules/async/lib/async.js:154:25
    at /home/jahidul/workspace/backstage-opticon/node_modules/async/lib/async.js:248:21
    at /home/jahidul/workspace/backstage-opticon/node_modules/async/lib/async.js:612:34
Run Code Online (Sandbox Code Playgroud)

任何想法?提前致谢。

Sow*_*Roy 5

使用以下参数:

var scanParams = {
        TableName : 'xxxx',
        FilterExpression : '( (event = :e0) AND (event = :e1 AND eventTime > :et1 AND eventTime < :et2) )',
        ExpressionAttributeValues: { 
          ':e0': { "S": "ME 21" },
          ':e1': { "S": "ME 21" },
          ':et1': { "N": "1509267218" },
          ':et2': { "N": "1509353618" } 
        },
        ProjectionExpression: "event, customer_id, visitor",
    };
Run Code Online (Sandbox Code Playgroud)

在 Dynamo DB 中,类型(数字)由“N”表示,并且值必须采用字符串格式“1509353618”。希望这能解决您的问题。