1

我对 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
    }
  ]
}
4

1 回答 1

1

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

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

我建议你创建:

  • 一列nprices : number
  • 一个 GSI(全局二级索引),带有您选择的哈希值和一个以nprices. 示例:哈希 = url,范围 = 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',
  },

})。承诺()

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

于 2018-11-30T08:27:38.437 回答