如何查询dynamodb以查找与特定规则匹配的所有项目?
我正在建立一个网上商店(如Asos),在dynamodb我有一个产品表。所有产品都有“类别”字段。所以我只想做一个简单的查询,我说像
FROM products WHERE category == 'trainers'
我已经设法让它工作,所以我扫描整个表并返回所有产品,但我现在想要更具体的查询
我认为我想使用类似KeyConditionExpression
之类的东西,但是当我这样做时我一直都会收到错误
编辑问题:
代码:
componentDidMount() {
console.log('mounted');
const AWS = window.AWS;
const params = {
TableName: 'Products',
FilterExpression: "category = trainers"
};
...secret key code
ddb.scan(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
this.setState({ products: data })
}
});
答案 0 :(得分:2)
试试这个
var params = {
ExpressionAttributeValues: {
":catval": {
S: "trainers"
}
},
FilterExpression: "category = :catval",
TableName: "Products"
};
dynamodb.scan(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
编辑:你不能在表达式中使用文字。你定义了一个ExpressionAttributeValue,我称你为“:catval”,但你可以随意调用它。 'S'表示一个字符串,所以基本上你定义一个ExpressionAttributeValue类型为String,值为“trainers”。然后,当您应用FilterExpression时,您将放入ExpressionAttributeValue,而不是文字。
答案 1 :(得分:0)
KeyConditionExpression适用于希望按主键属性过滤数据的情况。如果不是这种情况,则应使用FilterExpression。过滤器表达式确定应将“扫描”结果中的哪些项目返回给您。所有其他结果都被丢弃了。