【问题标题】:DynamoDB query filter on list countDynamoDB 查询过滤器列表计数
【发布时间】:2018-11-30 16:27:38
【问题描述】:

我是 DynamoDB 的新手,有一些问题,我有一个包含一些产品的表格,其中每个产品可以有多个价格。

我需要一种方法来以更多的价格购买所有产品,我该怎么做?

hash = url ( unique )
sort = vendor

示例数据:

{
  "created_at": "2018-11-29T14:33:20.354895+0000",
  "vendor": "example.com",
  "url": "http://example.com/test",
  "name": "test product",
  "prices": [
    {
      "created_at": "2018-11-29T14:33:20.316396+0000",
      "price": 29
    },
    {
      "created_at": "2018-11-28T14:33:20.316396+0000",
      "price": 45
    }
  ]
}

【问题讨论】:

  • 请告诉我们分区和最终排序键是什么。如果我很好地理解了您的示例,那么您就没有像可以并且应该做的那样使用 dynamodb 的好处。
  • 啊,对不起,我刚刚添加了数据。
  • @Costin 见我上面的评论。

标签: amazon-dynamodb dynamodb-queries


【解决方案1】:

鉴于您的表格模型,我不知道如何回答您的问题。但我可以建议你另一种模式。 :)

你的模型的问题是你想查询length(prices)。据我所知,DynamoDB 本身不会返回该值。

我建议你创建:

  • 一栏nprices : number
  • 具有您选择的散列和以nprices 开头的范围键的 GSI(全局二级索引)。示例:hash = url,range = nprices_vendor。

您可以通过以下方式查询数据库:

db.query({
  TableName: 'MY_TABLE_NAME',
  KeyConditionExpression: '#pk = :pk AND #sk > :skLow', # lexicographical comparison
  ExpressionAttributeNames: {
    '#pk': 'url', # partition key
    '#sk': 'nprices_vendor', # sorting key
  },
  ExpressionAttributeValues: {
    ':pk': 'http://example.com', 
    ':skLow': '2',
  },

}).promise()

但是这仍然不是最好的解决方案。您应该做的是修改您的表格并将每个价格放在自己的行中。那是另一个问题。 :)

【讨论】:

  • 价格公关。行解决方案可能不起作用,因为我还想要价格的时间戳..但是用价格计数更新行会起作用,谢谢;)
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2020-08-29
  • 1970-01-01
  • 2017-03-20
相关资源
最近更新 更多