基于列表计数的 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 并将每个价格放在自己的行中。那是另一个问题。 :)
我是 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 并将每个价格放在自己的行中。那是另一个问题。 :)