我正在尝试为DynamoDB中的地图对象内的属性添加索引,但似乎找不到这样做的方法。这是支持的东西还是索引真的只允许标量值?围绕这个的文档似乎非常稀少。我希望索引功能类似于MongoDB,但到目前为止,我使用点语法引用属性索引的方法还没有成功。可以提供任何帮助或其他信息。
答案 0 :(得分:29)
索引只能在顶级JSON属性上构建。此外,范围键必须是DynamoDB中的标量值(String,Number,Binary或Boolean之一)。
来自http://aws.amazon.com/dynamodb/faqs/:
问:在DynamoDB中查询JSON数据有什么不同吗?
没有。您可以创建全局二级索引或本地二级索引 在任何顶级JSON元素上。例如,假设您存储了一个JSON 包含有关某人的以下信息的文档: 名字,姓氏,邮政编码,以及他们所有朋友的名单。 名字,姓氏和邮政编码将是顶级JSON元素。 您可以创建一个索引,以便您根据名字,姓氏进行查询 名称或邮政编码。朋友列表不是顶级元素, 因此,您无法索引朋友列表。欲获得更多信息 有关全局二级索引及其查询功能,请参阅 本FAQ中的二级索引部分。
问:可以索引哪些数据类型?
所有标量数据类型(数字,字符串,二进制和布尔值)都可以 用于本地二级索引键的范围键元素。组, 列表和地图类型无法编入索引。
答案 1 :(得分:0)
我尝试分别存储对象时执行hash(str(object))。该哈希为我提供了一个整数(数字),并且我可以在其上使用二级索引。这个想法是要使整个对象较小,而实体仍保持完整。也就是说,不是将对象序列化和存储为字符串并改变了对象的使用方式,而是将较小的哈希值与实际列表或映射一起存储。