我只想检索表'notifications'的最后10项。
$iterator = $dynoClient->getIterator(
'Scan', array(
'TableName' => 'notifications',
'Limit' => 10,
'ScanFilter' => array(
"idTo" => array(
"AttributeValueList" => array(
array('N' => $_SESSION['VISITORDATA']['idUser'])
),
"ComparisonOperator" => "EQ"
)
),
)
);
为什么这个查询仍然得到所有的项目,而不是只有10?
更新我尝试了Jeremy的建议:
$iterator = $dynoClient->getIterator(
'Scan', array(
'TableName' => 'notifications',
'Limit' => 10,
'ScanFilter' => array(
"idTo" => array(
"AttributeValueList" => array(
array('N' => $_SESSION['VISITORDATA']['idUser'])
),
"ComparisonOperator" => "EQ"
)
),
),
array(
'Limit' => 10
)
);
但我仍然得到了所有的项目,而不仅仅是10。
之后我迭代
foreach ($iterator as $item) { $res[] = $item->toArray(); }
计数(res)美元;
Limit形参不限制迭代器,它是传递给Scan操作的形参。这基本上导致迭代器发出大量请求,每个请求只返回10个项。为了限制迭代器,也需要使用getIterator
的第三个参数设置限制(参见文档)。
$iterator = $dynoClient->getIterator(
'Scan', // operation name
array( // operation params
'TableName' => 'notifications',
'Limit' => 10,
// ...
),
array('limit' => 10), // iterator options
);
为了清楚起见,这适用于小写。客户端不限制它在一个请求中收集多少,这是迭代器的工作。
$iterator = $dynoClient->getIterator( 'Scan', array( 'TableName' => 'notifications', 'Limit' => 10, 'ScanFilter' => array( "idTo" => array( "AttributeValueList" => array( array('N' => $_SESSION['VISITORDATA']['idUser']) ), "ComparisonOperator" => "EQ" ) ), ), array( 'limit' => 10 ) );