代码示例在Go中,但这不是一个特定于Go的问题
我正在尝试防止对重复的本地二级索引的现有分区键进行重复写入。我有一个带有以下属性的Dynamo表(简化):
|公司ID(分区键)| createdAt\u ms(排序键)|用户名(LSI)
用户名字段是一个LocalSecondaryIndex,其名称是username\u index,它使用相同的分区键,排序键是它自己。
我试图阻止将项目请求放入我的表中,其中用户名已经存在于公司ID中。我尝试在写入之前使用以下条件检查
//tried with both "username_index" and "username"
condition := expression.NotEqual(expression.Key("username_index"), expression.Value("Nate123"))
req := &dynamodb.PutItemInput{
TableName: aws.String(db.Store.TableName),
ConditionExpression: expr.Condition(),
ExpressionAttributeNames: expr.Names(),
ExpressionAttributeValues: expr.Values(),
// ... etc
}
但是,如果排序键不同,例如,如果表已经有Google 4560000 Nate123,并且我尝试插入Google 7890000 Nate123,则会失败,它将允许对上述PutItem请求执行此操作。但是,如果排序键完全相同,它确实可以成功阻止PutItem请求。
我也尝试过:
golang prettyprint-override">// tried both "username" and "username_index"
condition := expression.AttributeNotExists(expression.Name("username_index"))
这在任何一种情况下都不起作用。我知道Dynamo中“主键”的概念是它的分区键sortKey,如果它们都存在,但我想知道混合中的LSI是否可以帮助我。
基本上,对于给定的分区键,如果排序键不同,是否可以防止重复的LSI写入,或者我是否需要更改我的架构以使用户名成为排序键?
这是对DynamoDB中条件表达式的常见误解。条件表达式仅检查要更新的记录是否满足条件。它不会查看是否有另一条记录满足该条件。如果您需要确保某个值实际上只是确定该值的一种方法;将唯一值用作记录的键,或将其某些部分用作保持唯一性的键。
您可以使用事务来检查某个项目是否存在,包括检查该项目的某些值,这些值不是您要添加/更新的项目,但我认为没有选项可以说“如果该项目不存在,请执行此操作”。即使存在,您所谈论的唯一值也必须是键的一部分(事务的条件检查需要项目的键,而不是查询)。
我希望使用DynamoDB表来请求我在查询中创建的二级索引。 从现在开始,对于我正在做的一个二级索引: 我会像这样构建我的KeyConditionExpression: 我读了一遍又一遍这份文件,但我不知道怎么做: https://docs.aws.amazon.com/fr_fr/amazondynamodb/latest/gettingstartedguide/GettingStarted.P
我的主键是一个名为“ID”的字段 我在表中的字段“group_number”上添加了一个辅助索引 我通过二级索引进行查询,如下所示: 然而;我得到错误“ValidationException:query condition missed key schema Element:ID” DynamoDB只允许查询主键吗?我的印象是您使用“getitem”作为主键,因为如果您使用一个主键,只有一个记录可
问题: 主键为复合哈希范围键的DynamoDB表是唯一的。这是否也延伸到二级指数? 示例: 我有一个带有post_id主键和comment_id范围键的comments DynamoDB表。此外,还有一个带有date-user_id范围键的本地辅助索引。 每个条目都是用户在发布时留下的评论。二级索引的目的是统计在特定的一天,有多少唯一的用户在一个帖子上留下了评论。 条目1:post_id:1 co
我有以下带有三个全局二级索引(GSI)的DyamoDB表 Id(主键)、user_id(GSI)、event_type(GSI)、product_id(GSI)、rate、create_date 我有以下三种查询模式: null null
我正在DynamoDB中创建一个表和GSI,使用以下参数,如文档所示: 是表的主键,我使用作为GSI的主键。(为了简洁起见,我删除了一些不必要的配置参数) 我正在使用以下命令查询此表: 但我一直在犯错误: "一个或多个参数值无效:条件参数类型与模式类型不匹配" 在文档中,它指定主可以是或,并且您可以在字段中设置。我正在以的形式发送,不确定这里缺少了什么。 问题是在我创建表的方式上,还是在我查询表的
我有一个DynamoDB表,分区键为userID,没有排序键。该表在每个项目中还具有时间戳属性。我想检索在指定范围内具有时间戳的所有项目(无论用户ID如何,即跨所有分区)。在阅读文档并搜索堆栈溢出(此处)后,我发现需要为我的表创建一个GSI。因此,我使用以下键创建了一个GSI: 分区键: 排序键: 我正在使用Java SDK使用以下代码查询索引: 执行此代码时出现以下错误: 据我所知,我应该能够仅