查询特定字段的dynamodb

时间:2018-01-21 08:50:19

标签: javascript amazon-web-services amazon-dynamodb

如何查询dynamodb以查找与特定规则匹配的所有项目?

我正在建立一个网上商店(如Asos),在dynamodb我有一个产品表。所有产品都有“类别”字段。所以我只想做一个简单的查询,我说像

FROM products WHERE category == 'trainers'

我已经设法让它工作,所以我扫描整个表并返回所有产品,但我现在想要更具体的查询

我认为我想使用类似KeyConditionExpression之类的东西,但是当我这样做时我一直都会收到错误

编辑问题:

enter image description here

代码:

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 })
  }
});

2 个答案:

答案 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。过滤器表达式确定应将“扫描”结果中的哪些项目返回给您。所有其他结果都被丢弃了。