【发布时间】:2021-08-02 13:10:01
【问题描述】:
我开始在 python 中使用 dynamoDB,但我怀疑我在网上找不到答案。我有一个这种格式的 JSON:
{
"version": "1.0.0",
"trips":[
{
"paymentMode": "ONLINE",
"type":"A",
"locations":{
"name": "Zona A",
"payment":1000
"company": ["XXX", "YYY"]
},
{
"paymentMode": "CASH",
"type":"B",
"locations":{
"name": "Zona D",
"payment":200
"company": ["XXX", "YYY"]
}
]
}
我可以直接存储它,但我不知道是否有一种方法可以在 get_item 操作或类似操作中单独访问行程中的每个元素?例如,将 paymentMode 和 type 作为主键和排序键,即使它们位于“trips”字段内。
输入将是这样的 Json,但我想将这些字段作为 PK(考虑到它们是唯一的),所以我只能检索一个项目。
我知道您可以只扫描所有内容,然后迭代旅行,但也许有更多元素,这将花费太长时间。有没有办法直接做到这一点?如果是这样,我该怎么做? dynamoDb 会自动执行此操作,还是我必须将其命名为 trips.PaymentMode 或类似名称?
非常感谢
【问题讨论】:
-
是的,我需要了解更多有关它的信息,但我找不到是否不能选择作为分区键,即 JSON 文件中的某些内容(例如 paymentMode,考虑到它是唯一的)。输入将始终是 JSON,只是旅行内容和版本会改变
-
回答您的直接问题:不,如果您打算将
trips作为嵌入列表存储在您的 DynamoDB 项目中,那么您不能使用trips中的字段作为您的分区键或排序键。更广泛地说,尝试为您的表提出架构的问题在于,我们没有足够的信息来说明您的客户端应用程序打算如何访问这些数据(它们的查询模式是什么)。没有它,您将无法设计架构。 -
设计是给我们这个文件,只有一个。唯一改变的是“trips”中的项目。然后,我会收到一个请求,根据请求的信息,我需要提取“trips”中一项的信息。
-
信息不够。将有多少次旅行(大约)?如果有的话,是什么使一次旅行与另一次旅行有独特的区别?您需要支持什么样的查询(仅支付模式?仅类型?支付模式加类型?所有上述?其他?)一次旅行和另一次旅行之间是否有任何关系,或者它们是独立的?
标签: python amazon-dynamodb dynamodb-queries