Java expected在dynamoDB中的putItemRequest中的工作方式

Java expected在dynamoDB中的putItemRequest中的工作方式,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,根据PutItemRequest的文档,如果我们提供了预期的地图,它将根据提供的条件进行AND 我添加了以下代码: Map<String, ExpectedAttributeValue> expected = new HashMap<String, ExpectedAttributeValue>(); expected.put("userId", new ExpectedAttributeValue(false)); exp

根据
PutItemRequest
的文档,如果我们提供了预期的地图,它将根据提供的条件进行AND

我添加了以下代码:

Map<String, ExpectedAttributeValue> expected = new HashMap<String, ExpectedAttributeValue>();
            expected.put("userId", new ExpectedAttributeValue(false));
            expected.put("email", new ExpectedAttributeValue(false));
Map expected=newhashmap();
expected.put(“userId”,新的ExpectedAttributeValue(false));
应为.put(“电子邮件”,新的应为属性值(false));
这里的
userId
是主键。但是,这是在接受重复的电子邮件信息


有人能帮我找出这里做错了什么吗?

如果您将“email”属性设置为表的范围键,那么hash key=userId和range key=email的组合将保持唯一性。

如果您将“email”属性设置为表的范围键,然后,hash key=userId和range key=email的组合将保持唯一性。

您能提供一个和您正在使用的SDK版本吗?如果能看到一个我可以在本地复制的例子,那会很有帮助。你所说的重复电子邮件信息是什么意思。在一个项目的
email
属性中重复,或者在用户应该具有唯一电子邮件的表中重复电子邮件?假设您不想将电子邮件地址作为唯一主键,您可能需要在电子邮件上创建GSI,然后在放置之前进行查找以测试重复。不要相信二级索引可以强制唯一性。啊,我想我理解你现在说的。如果我理解正确,您正在将多个
userId
放入一个名为
email
的属性表中。您只能在
散列
+
范围
键上获得唯一性。在这种情况下,不能保证
电子邮件在整个表中是唯一的。是的,你们是对的。但唯一的问题是,如果我将user+电子邮件设置为hash+范围,我将无法保证userId的唯一性。我没有测试二级索引。但这需要额外的吞吐量,所以我想避免这种情况。唯一剩下的选择似乎是在实际插入之前进行查询。但是这个选项在延迟方面似乎非常昂贵。你能提供一个和你正在使用的SDK版本吗?如果能看到一个我可以在本地复制的例子,那会很有帮助。你所说的重复电子邮件信息是什么意思。在一个项目的
email
属性中重复,或者在用户应该具有唯一电子邮件的表中重复电子邮件?假设您不想将电子邮件地址作为唯一主键,您可能需要在电子邮件上创建GSI,然后在放置之前进行查找以测试重复。不要相信二级索引可以强制唯一性。啊,我想我理解你现在说的。如果我理解正确,您正在将多个
userId
放入一个名为
email
的属性表中。您只能在
散列
+
范围
键上获得唯一性。在这种情况下,不能保证
电子邮件在整个表中是唯一的。是的,你们是对的。但唯一的问题是,如果我将user+电子邮件设置为hash+范围,我将无法保证userId的唯一性。我没有测试二级索引。但这需要额外的吞吐量,所以我想避免这种情况。唯一剩下的选择似乎是在实际插入之前进行查询。但是这个选项在延迟方面似乎非常昂贵。这样一来,(用户ID,电子邮件)的组合肯定是独一无二的。但我甚至希望userId是唯一的。因此,我无法通过将电子邮件设置为Range来实现,这样(userId,email)的组合肯定是唯一的。但我甚至希望userId是唯一的。因此,我无法通过将电子邮件作为范围来实现