vis*_*ksh 3 amazon-web-services node.js amazon-dynamodb
我在dynamoDB中有一个名为'Contributors'的表.我有一个主复合键,其中哈希键是'UserId',排序键是'NoteId'.我想查询属于特定hashkey的所有项目.
现在,如果我使用aws-cli,则以下命令有效:
aws dynamodb query \
--table-name Contributors \
--key-condition-expression 'UserId = :UserId' \
--expression-attribute-values '{
":UserId": {"N":"2"}
}'
Run Code Online (Sandbox Code Playgroud)
但是当我在Node.js中编写查询时,以下两个参数对象都不起作用:
var params = {
TableName: "Contributors",
KeyConditionExpression: "#UserId = :UserId",
ExpressionAttributeNames: {
"#UserId": "UserId"
},
ExpressionAttributeValues: {
":UserId": { "N": "2" }
}
};
Run Code Online (Sandbox Code Playgroud)
或这个:
var params = {
TableName: "Contributors",
KeyConditionExpression: "#UserId = :UserId",
ExpressionAttributeNames: {
"#UserId": "UserId"
},
ExpressionAttributeValues: {
":UserId": "2"
}
};
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ValidationException:一个或多个参数值无效:条件参数类型与模式类型不匹配
什么应该是正确的param对象?
sta*_*ool 23
由于传递数据类型和值,我遇到了问题。只需删除数据类型 DocumentClient 将自动解释数据类型,它的工作原理:
从:
ExpressionAttributeValues: {
":UserId": { "S": req.query.status }
}
Run Code Online (Sandbox Code Playgroud)
到:
ExpressionAttributeValues: {
":UserId": req.query.status
}
Run Code Online (Sandbox Code Playgroud)
not*_*est 10
以下代码应该有效.只需给出没有双引号的值.该DocumentClient会自动解释数据类型.
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "Contributors",
KeyConditionExpression: "#UserId = :UserId",
ExpressionAttributeNames: {
"#UserId": "UserId"
},
ExpressionAttributeValues: {
":UserId": 2
}
};
docClient.query(params, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err,
null, 2));
} else {
console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
}
});
Run Code Online (Sandbox Code Playgroud)
Jam*_*iro 10
更换:
var docClient = new AWS.DynamoDB.DocumentClient();
Run Code Online (Sandbox Code Playgroud)
和:
var docClient = new AWS.DynamoDB();
Run Code Online (Sandbox Code Playgroud)
立即为我解决了这个问题。
| 归档时间: |
|
| 查看次数: |
6949 次 |
| 最近记录: |