我正在使用DynamoDB作爲我的移動應用程序的後端數據庫,並且架構等在iOS中完全相同。對於特定的用例,我必須根據兩個未編制索引的屬性執行掃描。對於iOS Objective C,我使用以下代碼:AWS DynamoDB在iOS上掃描失敗,但在Android上工作
AWSDynamoDBScanExpression *scanExpression = [AWSDynamoDBScanExpression new];
scanExpression.limit = [NSNumber numberWithInt:maxCount];
scanExpression.filterExpression = @"#l = :location AND event = :event";
scanExpression.expressionAttributeNames = @{@"#l":@"location"};
scanExpression.expressionAttributeValues = @{@":location":location,
@":event":EVENT_TASTING};
位置和事件都是字符串。 EVENT_TASTING是一個字符串常量。此掃描不斷返回零結果,即使我已驗證提供的條目我應該收到結果。我在Android Java中使用以下代碼:
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
scanExpression.setLimit(maxCount);
scanExpression.addFilterCondition("location",
new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(location)));
scanExpression.addFilterCondition("event",
new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(Constants.EVENT_TASTING)));
掃描在Android中按預期工作。 iOS中需要更改哪些內容才能在其中工作?我更新iOS SDK到2.3.6,但它沒有什麼區別。這是我在我的代碼中唯一的掃描操作。
我的scanExpression for iOS有錯誤嗎?有沒有一種方法可以使用Android風格的語法在iOS上運行?
更新
我嘗試了以下變化:
AWSDynamoDBScanExpression *scanExpression = [AWSDynamoDBScanExpression new];
AWSDynamoDBAttributeValue *locationVal = [AWSDynamoDBAttributeValue new];
locationVal.S = location;
AWSDynamoDBAttributeValue *eventVal = [AWSDynamoDBAttributeValue new];
eventVal.S = EVENT_TASTING;
scanExpression.limit = [NSNumber numberWithInt:maxCount];
scanExpression.filterExpression = @"#l = :location AND event = :event";
scanExpression.expressionAttributeNames = @{@"#l":@"location"};
scanExpression.expressionAttributeValues = @{@":location":locationVal,
@":event":eventVal};
但現在我得到一個錯誤:
The request failed. Error: [Error Domain=com.amazonaws.AWSDynamoDBErrorDomain Code=0 "(null)" UserInfo={message=ExpressionAttributeValues contains invalid value: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes for key :location, __type=com.amazon.coral.validate#ValidationException}]
正如我所提到的:「即使我已驗證所提供的條目我應該收到結果,此掃描仍然返回零結果。」是的,我使用舊的過濾條件,因爲Android支持它,但iOS不。 – LNI
你仍然需要提供如何實例化'location'和'event'。此外,[打開詳細日誌記錄](http://docs.aws.amazon.com/mobile/sdkforios/developerguide/setup.html)並使用請求JSON更新問題。 –
使用詳細日誌記錄選項的輸出更新了問題。事件和位置都是字符串。以上輸出顯示它們正確設置。如果在使用DynamoDB控制檯的查詢中對事件和位置使用相同的值,則掃描會成功返回值。 – LNI