【问题标题】:Query dynamodb for a specific field查询特定字段的 dynamodb
【发布时间】:2018-01-21 23:29:24
【问题描述】:

如何在 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 })
  }
});

【问题讨论】:

  • 如果您发布您的架构、您当前正在尝试的查询以及您想要获得的内容,我可以提供帮助。
  • @Stu 我有一张桌子,我只想根据一个名为 category 的字段/列从中提取东西。如果有 10 个产品,我只希望退回类别 == trainers 的产品。还需要吗?
  • 您需要知道您的表架构才能构建查询。正如我所说,如果您可以提供您的架构和示例代码,我们可以从那里开始。否则,我无法真正补充 AWS 文档尚未告诉您的内容。
  • @Stu ok 补充说,这是我的桌子和一些代码,到目前为止,我试图只取出训练器,所以基本上应该退回产品 101 和 102
  • 好的,您是否收到此代码错误?错误信息是什么?

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


【解决方案1】:

试试这个

 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。然后,当您应用 FilterExpression 时,您输入的是 ExpressionAttributeValue,而不是文字。

【讨论】:

  • 完美!你能解释一下 catval 之前的: 吗?其他一切都有意义
  • 添加到答案中
  • 太好了,非常感谢!
  • 没问题。祝你好运。如果您有任何问题,请提出另一个问题,我会密切关注 dynamodb 标签。
  • 干杯,稍后可能会有关于如何将图像从 S3 拉入 DDB 的问题,但我会先看看我是如何开始的 :)。再次感谢
【解决方案2】:

KeyConditionExpression 适用于您希望按主键属性过滤数据的情况。如果这不是你的情况,你应该使用 FilterExpression。过滤器表达式确定应将扫描结果中的哪些项目返回给您。所有其他结果都将被丢弃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2020-06-19
    相关资源
    最近更新 更多