有人能告诉我如何将映射设置为尚不存在的属性的值吗?我一直在尝试一个更新表达式"SET Myattr.#key=: val"
,但这只在属性存在并且属性的值已经是映射的情况下才有效。
我尝试使用“ADD MyAttr.#key=:val”
,但后来我得到了:
UpdateExpression无效:语法错误;标记:“=”,靠近:#key=:val”
我正在使用Java。请注意,我正在尝试使用UpdateItem请求来完成此操作。我刚刚想到,这可能不适用于映射。我只是假设它会,因为如果不存在,我总是能够通过更新请求创建新的项目和/或属性(使用其他属性值数据类型,如字符串、数字等)。
假设DynamoDB表中有以下项:
{
"id": "91c2b60d-c428-403c-be42-8657b4f20669",
"firstName": "John",
"lastName": "Doe"
}
我们希望在地图中添加自定义属性:
Map<String, String> customAttributes = new HashMap<>();
customAttributes.put("age", "21");
customAttributes.put("gender", "Male");
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
DynamoDB dynamodb = new DynamoDB(client);
Table table = dynamodb.getTable("users");
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("id", "91c2b60d-c428-403c-be42-8657b4f20669")
.withUpdateExpression("set #customAttributes = :customAttributes")
.withNameMap(new NameMap().with("#customAttributes", "customAttributes"))
.withValueMap(new ValueMap().withMap(":customAttributes", customAttributes))
.withReturnValues(ReturnValue.ALL_NEW);
UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
System.out.println(outcome.getItem().toJSONPretty());
结果:
{
"id" : "91c2b60d-c428-403c-be42-8657b4f20669",
"firstName" : "John",
"lastName" : "Doe",
"customAttributes" : {
"gender" : "Male",
"age" : "21"
}
}
现在,如果我们想向customAttributes映射添加一个新属性:
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("id", "91c2b60d-c428-403c-be42-8657b4f20669")
.withUpdateExpression("set customAttributes.#occupation = :value")
.withNameMap(new NameMap().with("#occupation", "occupation"))
.withValueMap(new ValueMap().withString(":value", "Programmer"))
.withReturnValues(ReturnValue.ALL_NEW);
UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
System.out.println(outcome.getItem().toJSONPretty());
我建议您看看:DynamoDBMapper,它将为您节省大量代码。
我需要将源类中的字段值映射到字段属性。我可以使用Mapstruct使用@mapper注释的'expression'参数来完成 有没有其他方法可以不使用“表达式”来进行映射?
我刚刚开始我的第一个DynamoDB项目,我一直在尽可能多地阅读文档。我认为我的项目最好的可能性是使用SDK中的高级DynamoDbMapper来允许CRUD操作。 在DynamoDB文档中,有一种属性值“M”的类型,可以在这里看到http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.htm
在我的数据库表中,我有一个列,它的内容可以是Y或N(CHECK约束)。我在Java中定义了一个String属性,在我的类中定义了一个基于String的setter。此外,为了方便起见,我添加了一个带有布尔参数的setter/getter。 那么,Hibernate基于什么属性进行映射呢?方法名称?参数名称?参数类型?在setter中使用可以吗?如果我的属性的名称与表列的名称不同,这会有什么不同吗?
MapStrut的新成员;对象到字符串错误: [错误] /util/LicenseMapper.java:[11,23]无法映射属性" Java . lang . object license . custom fields[]。值" to " Java . lang . string license . custom fields[]。值”。考虑声明/实现一个映射方法:“Java . lang
我最近开始使用 DynamoDB,我看到要使用 DynamoDB 映射器框架,我需要先知道属性的名称,然后再将其绑定到类变量。如果我必须实现几个动态变化的属性,但仍然希望能够在扫描期间对它们设置条件,该怎么办?我尝试在类中绑定一个哈希映射(假设在变量“attrMap”下),并编写我自己的编组器来设置它。但是,我注意到它在Dynamo表中保存为一个具有复杂值的属性“attrMap”,这不允许我在扫描
问题内容: 我正在尝试查询DynamoDB表以查找未设置属性的所有项目。包含该字段的表上存在一个称为的全局二级索引。 结果: 表定义: 问题答案: DynamoDB的全局二级索引允许稀疏索引。这意味着,如果您有一个GSI,但未定义该项目的哈希或范围键,则该项目将不会直接包含在GSI中。这在许多用例中很有用,因为它使您可以直接识别包含某些字段的记录。但是,如果您缺少字段,则此方法将行不通。 要获取所