Запросить конкретный результат в Amazon DynamoDB

Я использую DynamoDB SDK v2. Я могу сканировать базу данных, но мне не удается запросить у нее конкретные результаты. Я не знаю, неправильно ли я настроил БД или неправильно выполняю запрос.

Когда я использую

- (void)getTableRow:(NSString *)rangeKey {
          AWSDynamoDBObjectMapper *dynamoDBObjectMapper = [AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper];
            [[dynamoDBObjectMapper load:[SonicUserTableRow class]
                                hashKey:@"UserId"
                               rangeKey:rangeKey] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) {
                if (!task.error) {

                   SonicUserTableRow *tableRow = task.result;

                   NSLog (@"Table Row %@", tableRow);

            } else {
               //Catch Error

            }
            return nil;
        }];
}

Я вызываю это с помощью [self getTableRow:@" ENTER UNIQUE USER ID "];

Однако я получаю сообщение об ошибке

The provided key element does not match the schema

Как я могу это исправить?

Обратите внимание: я использую новый Amazon SDK v2.

Моя база данных введите описание изображения здесь

HASH & RANGE KEYS

введите описание изображения здесь

SonicUserTableRow .m

+ (NSString *)dynamoDBTableName {
    return @"SonicUsers";
}

+ (NSString *)hashKeyAttribute {
    return @"UserId";
}

+ (NSString *)rangeKeyAttribute {
    return @"Username";
}

SonicUserTableRow .h

@interface SonicUserTableRow : AWSDynamoDBModel <AWSDynamoDBModeling>

@property (nonatomic, strong) NSString *UserId;
@property (nonatomic, strong) NSString *Username;
@property (nonatomic, strong) NSString *profileImage;
@property (nonatomic, strong) NSString *active;
@property (nonatomic, strong) NSString *email;
@property (nonatomic, strong) NSString *flags;
@property (nonatomic, strong) NSString *attuned;

У меня есть значение UserId UserIdString: us-east-1:4ae0a93a-59a6-45fd-80c8-ff6b99f1d152 в базе данных, поэтому я пытаюсь позвонить, например: [self getTableRow:@"us-east-1:4ae0a93a-59a6-45fd-80c8-ff6b99f1d152"];


person memyselfandmyiphone    schedule 22.10.2014    source источник


Ответы (1)


Если DropId - хэш-ключ вашей таблицы, вы можете использовать - load:hashKey:rangeKey: для загрузки одного элемента.

person Yosuke Matsuda    schedule 22.10.2014
comment
У нас есть образец DynamoDB Object Mapper в нашем образцах репозитория GitHub. - person Yosuke Matsuda; 27.10.2014
comment
Пытаюсь заставить это работать даже с гитхабом. Обновлен вопрос, указав, что я сделал, и награду за награду. - person memyselfandmyiphone; 30.10.2014
comment
Вы должны поделиться определением SonicUserTableRow (файлы .h и .m). Возможно, он настроен неправильно. - person Yosuke Matsuda; 30.10.2014
comment
Вам следует перейти к представлению Подробности в Консоли управления AWS и убедиться, что вы видите Primary Hash Key: hashKeyAttribute (String) и Primary Range Key: rangeKey (String). Они должны соответствовать значениям, возвращаемым + hashKeyAttribute и + rangeKeyAttribute. - person Yosuke Matsuda; 30.10.2014
comment
Я изменил их, чтобы они совпадали с теми, что указаны в консоли AWS, и теперь я получаю нулевое значение в возвращаемом поле (хотя ошибка исчезла), даже когда я передаю идентификатор, который, как я знаю, есть. Я чувствую себя идиотом. Помощь приветствуется - person memyselfandmyiphone; 30.10.2014
comment
Можете ли вы обновить фрагмент кода, чтобы распечатать хэш-ключи и ключи диапазона и опубликовать соответствующую строку данных таблицы из Консоли управления AWS? Скорее всего, причина в том, что вы отправляете неправильный хэш и ключи диапазона. - person Yosuke Matsuda; 31.10.2014
comment
В зависимости от фрагмента кода UserIdString: us-east-1:4ae0a93a-59a6-45fd-80c8-ff6b99f1d152 должно быть Username: us-east-1:4ae0a93a-59a6-45fd-80c8-ff6b99f1d152. SDK не поддерживает вторичные индексы, и rangeKey из - load:hashKey:rangeKey: должен быть ключом диапазона таблицы. - person Yosuke Matsuda; 03.11.2014
comment
Тут мое основное недоразумение. Спасибо - person memyselfandmyiphone; 04.11.2014
comment
Документация AWS действительно очень плохая, TBH! Я попытался изучить Справочник по классу AWSDynamoDBQuery и ничего полезного не нашел. @YosukeMatsuda :( - person rohan-patel; 14.08.2015