![](/img/trans.png)
[英]DynamoDB SDK for PHP: Is it possible to scan a list of items with key of a nested item?
[英]DynamoDB Scan with multiple, nested JSON keys (PHP)
我的数据按照以下模式存储在DynamoDB中的单个表“事件”中,其中“ _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”元素的数据INSIDE进行扫描时, 无法获得任何匹配的条目 。 下面的示例代码(我正在尝试使用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文档的INSIDE值来提取数据吗? 在此先感谢您的任何建议!
编辑
我已经尝试过DynamoDB PHP SDK文档中的以下代码( http://docs.aws.amazon.com/aws-sdk-php/v3/api/Aws/DynamoDb/dynamodb-2012-08-10.html#scan )- 仍然没有成功 。 我只能在使用主哈希/范围键和任何其他(“第一级”)键进行扫描时进行检索,而不能像在我的示例中那样使用文档(地图/列表)的INSIDE中的键进行检索。 见下文:
$iterator = $client->getIterator('Scan', array(
'TableName' => 'events',
'ScanFilter' => array(
'data' => array(
'AttributeValueList' => array(
array(
'M' => array(
'name' => array("S"=>"Jeff"),
),
),
),
'ComparisonOperator' => 'EQ',
),
),
));
解决我的问题的方法:
$iterator = $client->getIterator('Scan', array(
'TableName' => 'event_test2',
'FilterExpression' => 'event.customer_name = :filter',
"ExpressionAttributeValues" => array(":filter"=>array("S"=>"Jeff")),
));
此处的更多信息: https : //forums.aws.amazon.com/thread.jspa?threadID=164470
从API看来,这是可能的,但我从未真正尝试过。 但这绝对不是正确的语法。 查看即将推出的适用于PHP的AWS开发工具包版本3的Scan
API文档 (由于某些技术限制,版本2文档不包括最新的DynamoDB功能)。 您将需要使用嵌套的AttributeValueList
参数。 您可能还想在DynamoDB官方论坛上对此进行询问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.