Mik*_*dge 9 node.js amazon-dynamodb aws-lambda
我正在尝试从DynamoDB表中检索匹配a的所有项目FilterExpression,虽然扫描了所有项目并且一半匹配,但不会返回预期的项目.
我在Node.js 6.10上运行的AWS Lambda函数中有以下内容:
var AWS = require("aws-sdk"),
documentClient = new AWS.DynamoDB.DocumentClient();
function fetchQuotes(category) {
let params = {
"TableName": "quotient-quotes",
"FilterExpression": "category = :cat",
"ExpressionAttributeValues": {":cat": {"S": category}}
};
console.log(`params=${JSON.stringify(params)}`);
documentClient.scan(params, function(err, data) {
if (err) {
console.error(JSON.stringify(err));
} else {
console.log(JSON.stringify(data));
}
});
}
Run Code Online (Sandbox Code Playgroud)
表中有10个项目,其中一个是:
{
"category": "ChuckNorris",
"quote": "Chuck Norris does not sleep. He waits.",
"uuid": "844a0af7-71e9-41b0-9ca7-d090bb71fdb8"
}
Run Code Online (Sandbox Code Playgroud)
使用"ChuckNorris"类别进行测试时,日志显示:
params={"TableName":"quotient-quotes","FilterExpression":"category = :cat","ExpressionAttributeValues":{":cat":{"S":"ChuckNorris"}}}
{"Items":[],"Count":0,"ScannedCount":10}
Run Code Online (Sandbox Code Playgroud)
scan当我只指定时,该调用返回所有10个项目TableName:
params={"TableName":"quotient-quotes"}
{"Items":[<snip>,{"category":"ChuckNorris","uuid":"844a0af7-71e9-41b0-9ca7-d090bb71fdb8","CamelCase":"thevalue","quote":"Chuck Norris does not sleep. He waits."},<snip>],"Count":10,"ScannedCount":10}
Run Code Online (Sandbox Code Playgroud)
Joe*_*sca 14
您不需要"S"在您中指定type(),ExpressionAttributeValues因为您正在使用DynamoDB DocumentClient.根据文件:
文档客户端通过抽象出属性值的概念简化了在Amazon DynamoDB中处理项目的过程.此抽象注释作为输入参数提供的本机JavaScript类型,以及将带注释的响应数据转换为本机JavaScript类型.
只有当您通过使用原始DynamoDB对象new AWS.DynamoDB(),你需要指定属性类型(例如,简单对象键上"S","N"等).
有了DocumentClient,你应该能够使用这样的参数:
const params = {
TableName: 'quotient-quotes',
FilterExpression: '#cat = :cat',
ExpressionAttributeNames: {
'#cat': 'category',
},
ExpressionAttributeValues: {
':cat': category,
},
};
Run Code Online (Sandbox Code Playgroud)
请注意,ExpressionAttributeNames为了保持一致性和安全性,我还将字段名称移动为一个值.这是一个很好的做法,因为如果不这样做,某些字段名称可能会破坏您的请求.
| 归档时间: |
|
| 查看次数: |
7018 次 |
| 最近记录: |