我在表中有一行,其中N值为1而不是0.此字段称为active_duty_manager,我想拉回值为1的行,以便获取用户凭据。
当我使用以下代码查询表时:
var params = {
AttributesToGet: ['mobile'],
TableName: 've-users',
Key: { 'is_active_duty_manager': {N:1} },
};
ddb.getItem(params, function (err, data) {
if (err) {
console.log(err);
} else { // Call DynamoDB to read the item from the table
console.log("Success, duty manager =",data.Item.user_id.N);
}
})
我收到以下错误:
{ InvalidParameterType: Expected params.Key['is_active_duty_manager'].N to be a string
at ParamValidator.fail (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:50:37)
at ParamValidator.validateType (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:222:10)
at ParamValidator.validateString (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:154:32)
at ParamValidator.validateScalar (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:130:21)
at ParamValidator.validateMember (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:94:21)
at ParamValidator.validateStructure (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:75:14)
at ParamValidator.validateMember (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:88:21)
at ParamValidator.validateMap (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:117:14)
at ParamValidator.validateMember (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:92:21)
at ParamValidator.validateStructure (/Users/kevin/lambda/dynamo/node_modules/aws-sdk/lib/param_validator.js:75:14)
message: 'Expected params.Key[\'is_active_duty_manager\'].N to be a string',
code: 'InvalidParameterType',
time: 2018-02-26T20:13:09.795Z }
如果我将一行导出为CSV,我可以看到列类型是S或N,例如,active_duty_manager肯定是一个数字。所以问题是为什么错误期望params.Key值是一个字符串?
非常感谢Kevin
所以看着你的表,你在user_id上有一个主键。这意味着你不能在这个表上写一个查询,它会给你询问的结果,无论你写什么都行不通。
在我看来,你基本上有两个选择:
当您的表格非常小时,选项1可能仍然适合您。成本优化有点超出范围,祝你好运!
看起来你需要像Key: { 'is_active_duty_manager': {'N':'1'} },
一样定义密钥
您可能需要使用引号重构整个参数。
var params = {
"AttributesToGet": ["mobile"],
"TableName": "ve-users",
"Key": { "is_active_duty_manager": {"N":"1"} },
};
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html
以下是DynamoDB API参考中的请求语法:
{
"AttributesToGet": [ "string" ],
"ConsistentRead": boolean,
"ExpressionAttributeNames": {
"string" : "string"
},
"Key": {
"string" : {
"B": blob,
"BOOL": boolean,
"BS": [ blob ],
"L": [
"AttributeValue"
],
"M": {
"string" : "AttributeValue"
},
"N": "string",
"NS": [ "string" ],
"NULL": boolean,
"S": "string",
"SS": [ "string" ]
}
},
"ProjectionExpression": "string",
"ReturnConsumedCapacity": "string",
"TableName": "string"
}