【发布时间】:2014-12-27 23:48:45
【问题描述】:
我的数据存储在 DynamoDB 中的单个表“events”中,采用以下架构,其中“_id”作为哈希键,“microtime”作为范围键(以下示例数据):
{
"_id": {
"S": "ae3761b5-b73b-4fb9-ae5a-5cc230b8fa11"
},
"data": {
"M": {
"name": {
"S": "Jeff"
},
"purchase_value": {
"N": "25"
},
"user_id": {
"N": "1201"
}
}
},
"microtime": {
"N": "14147568808639"
}
}
我正在使用 AWS PHP SDK 2.7.0 根据我的过滤器(在本例中为主哈希键“_id”)扫描数据库。我下面的代码完美运行(返回正确的条目):
$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);
}
现在,当我尝试根据“数据”元素内部的数据进行扫描时,我无法获得任何匹配的条目。下面的示例代码(我正在尝试使用 data.name=Jeff 提取所有内容):
$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);
}
任何人都可以看到我的代码有任何问题,或者实际上无法通过比较 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',
),
),
));
【问题讨论】:
标签: php json amazon-web-services amazon-dynamodb