首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InvalidParameterType: params.ExpressionAttributeValues[':et1'].N应为字符串

InvalidParameterType: params.ExpressionAttributeValues[':et1'].N应为字符串
EN

Stack Overflow用户
提问于 2017-10-30 17:12:35
回答 2查看 3.4K关注 0票数 1

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

代码语言:javascript
复制
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",
    };

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

下面是错误:

代码语言:javascript
复制
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

有什么想法吗?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-08-29 15:15:28

使用下面的参数:

代码语言:javascript
复制
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",
    };

在Dynamo DB中,类型(Number)由"N“表示,值必须为字符串格式"1509353618”。希望这能解决你的问题。

票数 4
EN

Stack Overflow用户

发布于 2017-10-30 19:13:50

实际上,您不需要包含et1et2变量的数据类型。DynamoDB应用程序接口应该能够自动将其解释为数字。类似地,对于变量e0e1

请尝试下面的代码。

代码语言:javascript
复制
var scanParams = {
        TableName : 'xxxx',
        FilterExpression : '( (event = :e0) AND (event = :e1 AND eventTime > :et1 AND eventTime < :et2) )',
        ExpressionAttributeValues: { 
          ':e0': 'ME 21',
          ':e1': 'ME 21',
          ':et1': 1509267218,
          ':et2': 1509353618
        },
        ProjectionExpression: "event, customer_id, visitor",
    };

完全测试代码:-

您可能需要在以下代码中更改表名和键属性名称。

代码语言:javascript
复制
var AWS = require("aws-sdk");
var creds = new AWS.Credentials('akid', 'secret', 'session');

AWS.config.update({
    region: "us-west-2",
    endpoint: "http://localhost:8000",
    credentials: creds
});

var docClient = new AWS.DynamoDB.DocumentClient();

var params = {
    TableName: "table4",
    FilterExpression: "userid = :user_id1 AND (userid = :user_id2 AND ts > :et1 AND ts < :et2)",
    ExpressionAttributeValues: { ":user_id1": 'ME 21',
        ":user_id2": 'ME 21',
        ":et1" : '1509267216',
        ":et2" : 1509353618,
    }

};

docClient.scan(params, onScan);
var count = 0;

function onScan(err, data) {
    if (err) {
        console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Scan succeeded.");
        data.Items.forEach(function (itemdata) {
            console.log("Item :", ++count, JSON.stringify(itemdata));
        });

        // continue scanning if we have more items
        if (typeof data.LastEvaluatedKey != "undefined") {
            console.log("Scanning for more...");
            params.ExclusiveStartKey = data.LastEvaluatedKey;
            docClient.scan(params, onScan);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47011509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档