【发布时间】:2020-04-22 05:44:20
【问题描述】:
我一直在做一个玩具项目,并注意到 dynamo 在我的两个属性名称中添加了一个 (NULL) 后缀。我以前没有注意到,所以我认为它一定是在我的代码更改之一之后发生的。我在网上找不到任何关于这种行为的参考。
我正在运行的脚本是一个简单的PutItem,来自官方 Dynamodb 文档,我在表格中插入了一些模拟用户。
func InsertModel(m interface{}) error {
av, err := dynamodbattribute.MarshalMap(m)
if err != nil {
return fmt.Errorf("handlers: Got error marshalling map: %v", err)
}
input := &dynamodb.PutItemInput{
Item: av,
TableName: aws.String(appTableName),
ConditionExpression: aws.String("attribute_not_exists(PK) AND attribute_not_exists(SK)"),
}
_, err = svc.PutItem(input)
if err != nil {
return fmt.Errorf("handlers: Got error calling PutItem: %v", err)
}
return nil
}
m(用户模拟数据)的所有字段类型为string:
UserModel{PK: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b", SK: "user_info", Name: "bla", ImageURI: "aaa"},
当我删除“名称”和“ImageURI”字段时,PutItem 会在字段值中插入一个布尔值 true,如下所示。
这是MarshalMap操作后av中的值。
- 填充了“名称”和“ImageURI”字段:
map[ImageURI:{
S: "aaa"
} Name:{
S: "bla"
} PK:{
S: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b"
} SK:{
S: "user_info"
}]
- 这里没有“名称”和“ImageURI”,如
UserModel{PK: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b", SK: "user_info"}
map[ImageURI:{
NULL: true
} Name:{
NULL: true
} PK:{
S: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b"
} SK:{
S: "user_info"
}]
我试图从表中删除所有记录并再次插入,但行为仍在继续。此外,我对int 类型属性执行了相同的过程(插入具有填充和未填充的 int 属性的对象),当它未填充时我得到 0(这是我所期望的)。我尝试使用不同的字符串类型属性复制它,并且得到相同的行为(为空时为真),但属性名称没有获得后缀 NULL。
总而言之,在我的例子中,这种行为似乎主要发生在 string 类型上,我只在属性“Name”和“ImageURI”中得到一个 NULL 后缀,但在其他字符串属性上没有我试过了(也不是 int 的)。
【问题讨论】:
标签: amazon-dynamodb aws-sdk-go