내 데이터는 "_id"를 해시 키로, "마이크로 시간"을 범위 키로 사용하는 다음 스키마의 DynamoDB에서 "이벤트"단일 테이블 "이벤트"에 저장됩니다 (아래 예제 데이터) : 나는 (이 예, 주 해시 키 "_id"에서) 내 필터를 기반으로 데이터베이스를 검색하기 위해 AWS PHP SDK 2.7.0을 사용하고다중 중첩 JSON 키 (PHP)
{
"_id": {
"S": "ae3761b5-b73b-4fb9-ae5a-5cc230b8fa11"
},
"data": {
"M": {
"name": {
"S": "Jeff"
},
"purchase_value": {
"N": "25"
},
"user_id": {
"N": "1201"
}
}
},
"microtime": {
"N": "14147568808639"
}
}
. 나는 "데이터"요소 내부 데이터를 기반으로, 내가 일치하는 항목를 얻을 수 없다 스캔 할 때 지금
$client = DynamoDbClient::factory(array(
'key' => 'key',
'secret' => 'secret',
'region' => 'eu-west-1'
));
$iterator = $client->getIterator('Scan', array(
'TableName' => 'events',
'ScanFilter' => array(
'_id' => array(
'AttributeValueList' => array(
array('S' => "ae3761b5-b73b-4fb9-ae5a-5cc230b8fa11")
),
'ComparisonOperator' => 'EQ'
),
)
));
foreach ($iterator as $item) {
print_r($item);
}
: 그 아래에 내 코드는 완벽하게 (반환 올바른 항목)를 작동합니다.
이$iterator = $client->getIterator('Scan', array(
'TableName' => 'events',
'ScanFilter' => array(
'data.name' => array(
'AttributeValueList' => array(
array('S' => "Jeff")
),
'ComparisonOperator' => 'EQ'
),
)
));
foreach ($iterator as $item) {
print_r($item);
}
누군가 내 코드와 함께 문제를 볼 수 있습니다, 또는 내부의 값을 비교하여 데이터를 추출하는 사실 그것은 불가능하다 : 아래의 예제 코드 (I 제프 data.name 모든 추출 =하려합니다) JSON 문서? 미리 제안 해 주셔서 감사합니다. 내가 DynamoDB의 PHP SDK 문서 (http://docs.aws.amazon.com/aws-sdk-php/v3/api/Aws/DynamoDb/dynamodb-2012-08-10.html#scan)에서 다음 코드를 시도했습니다
편집 - 여전히 성공. 필자는 기본 해시/범위 키 및 다른 ("첫 번째 수준") 키를 사용하여 검색 할 때만 검색 할 수 있지만 필자의 예와 같이 문서 (지도/목록)의 내부에서 키를 사용하지는 않습니다. 아래를 참조하십시오 :
$iterator = $client->getIterator('Scan', array(
'TableName' => 'events',
'ScanFilter' => array(
'data' => array(
'AttributeValueList' => array(
array(
'M' => array(
'name' => array("S"=>"Jeff"),
),
),
),
'ComparisonOperator' => 'EQ',
),
),
));
마샬 러를 사용하여 데이터 유형에 두통을 피할 수 있습니다. http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.DynamoDb.Marshaler.html – tsuz