基于列表计数的 DynamoDB 查询过滤器

DynamoDB query filter on list count

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

我需要一种方法来获得所有产品的价格更高,我该怎么做?

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
    }
  ]
}

鉴于您的 table 模型,我不知道如何回答您的问题。但我可以向您推荐另一种型号。 :)

你的模型有问题,你想查询length(prices)。据我所知,DynamoDB 本身没有 return 这个值。

我建议你创建:

  • nprices : number
  • 一个 GSI(全局二级索引),其中包含您选择的哈希和以 nprices 开头的范围键。例子: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()

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