Я сделал такую схему~
type Movie struct {
Year int `json:"year"`
Title string `json:"title"`
Key string `json:"userId"`
Email string `json:"email"`
Bio string `json:"bio"`
Number int `json:"phoneNumber"`
SocialHandle string `json:"socialHandle"`
Onboarding string `json:"username"`
BankDetails string `json:"bankDetails"`
Image string `json:"image"`
Password string `json:"password"`
Resume string `json:"resume"`
Pincode string `json:"pinCode"`
}
Здесь Key и onboarding — мои первичные ключи и ключи сортировки соответственно. Затем я добавил такие данные~
movie := Movie{
Key: "2323",
Onboarding: "The Big New Movie",
}
Затем я сделал обычную MarshalMap того, что я сделал, и использовал данные для получения предмета.
key, err := dynamodbattribute.MarshalMap(movie)
if err != nil {
fmt.Println(err.Error())
return
}
input := &dynamodb.GetItemInput{
Key: key,
TableName: aws.String("tablename"),
}
result, err := svc.GetItem(input)
if err != nil {
fmt.Println(err)
fmt.Println(err.Error())
return
}
Странно то, что я вставил данные, используя тот же код с небольшими изменениями, но при извлечении данных отображается ошибка ~ ValidationException: предоставленный ключевой элемент не соответствует схеме
@LeeHannigan AttributeDefinitions: [{AttributeName: "userId", AttributeType: "S" }, {AttributeName: "username", AttributeType: "S" }], хотя я вставил 4-5 данных с большим количеством имен столбцов
Ваша структура Movie не содержит идентификатора пользователя или имени пользователя, поэтому она жалуется. Эта схема основана на первичном ключе и ключе сортировки, которые вы задали при создании таблицы. Вероятно, вам нужно воссоздать свою таблицу с PK/SK, соответствующей вашей схеме Movie.
@ChrisAnderson movie := Movie{ Ключ: "23g23", Год: 2015, Название: "The Big New Movie", Онбординг: "Fdsfsd", }, структура Movie, которую я описал, состоит из ключевого имени пользователя и идентификатора пользователя, кроме этого когда я запрашиваю подобное, проблема все еще возникает.
@ChrisAnderson Я думаю, что у меня могут быть только ключи, которые присутствуют в схеме, иначе поиск не вернется. Это означает, что дополнительный ключ не допускается.





Эта ошибка, вероятно, вызвана отправкой неключевых атрибутов в вызове GetItem. Когда вы используете MarshalMap, он включает нулевое значение для всех других атрибутов в ключевом объекте.
Либо вы можете создать ключ вручную:
Key: map[string]*dynamodb.AttributeValue{
"userId": {
S: aws.String("2323"),
},
"username": {
S: aws.String("The Big New Movie"),
},
},
Или добавьте omitempty в поля структуры, что исключит эти атрибуты из упорядоченной карты, если они не имеют значения:
type Movie struct {
Year int `json:"year,omitempty"`
Title string `json:"title,omitempty"`
[...]
}
Я пробовал то же самое, т. Е. omitempty, но когда я ищу с первичным ключом, ключом сортировки и любым третьим параметром, например, электронной почтой или прочим, он выдает ту же ошибку.
Вы не можете искать все значения в запросе GetItem, вы должны указать только первичный ключ, состоящий из ключей раздела и необязательных ключей сортировки.
Можете ли вы поделиться выводом
DeacribeTableдля вашей таблицы?