我想知道是否可以创建一个看起来像这样的索引
{
"dispenserId": "my-dispenser-123", // primary key
"users": ["user5", "user12"],
"robotId": "my-robot-1",
"enabled": true,
"side": left
}
基于我的DynamoDB文档,如下所示:
{
"robotId": "my-robot-1", // primary key
"dispensers": {
"left": "left-dispenser-123",
"right": "right-dispenser-123",
"users": ["user5", "user12"]
},
"enabled": true,
"users": ["user1", "user32"]
}
我无法弄清楚如何指向dispensers.left
或dispensers.right
并将其用作键,我也不能弄清楚如何根据点胶机ID的路径。
可以用当前的结构实现吗?如果没有,那么您会建议采用哪种文档结构。可以让我保存相同的数据吗?
答案 0 :(得分:1)
DynamoDB不支持您尝试执行的操作(将地图元素用作索引的键属性)。
索引分区键和排序键(如果存在)可以是字符串,数字或二进制类型的任何基表属性。 (Source)
您不能将map属性(的元素)用作索引的键属性,因为键属性必须是基表中的字符串,数字或二进制属性。
请考虑使用adjacency list design pattern作为数据。它将使您可以轻松地将左右分配器添加到索引中。
答案 1 :(得分:0)
我的新结构看起来像这样
partition key: robotId
sort key: compoundKey
[
{
"robotId": "robot1",
"enabled": true,
"users": [
"user1",
"user3"
],
"compositeKey": "robot--robot1"
},
{
"robotId": "robot1",
"dispenserId": "dispenser1",
"compositeKey": "dispenser--dispenser1",
"side": "left",
"users": [
"user4",
"user61"
]
}
]
然后我有了一个以dispenserId
作为分区键的索引,因此我可以查找给定机器人的分配器(使用表格)或查找有关分配器的详细信息(使用索引)