我想只检索表格'通知'。
的最后10个$iterator = $dynoClient->getIterator(
'Scan', array(
'TableName' => 'notifications',
'Limit' => 10,
'ScanFilter' => array(
"idTo" => array(
"AttributeValueList" => array(
array('N' => $_SESSION['VISITORDATA']['idUser'])
),
"ComparisonOperator" => "EQ"
)
),
)
);
为什么这个查询仍然得到所有的itens而不仅仅是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);
应该只有10个。
答案 0 :(得分:2)
Limit参数不限制迭代器,它是传递给Scan操作的参数。这基本上导致迭代器产生大量请求,每个请求只返回10个项目。要限制迭代器,您还需要使用getIterator
(see docs)的第3个参数设置限制。
$iterator = $dynoClient->getIterator(
'Scan', // operation name
array( // operation params
'TableName' => 'notifications',
'Limit' => 10,
// ...
),
array('limit' => 10), // iterator options
);
答案 1 :(得分:0)
要清楚,这适用于小写。客户端并不限制它在一个请求中收集的数量,这是迭代器的工作。
$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 ) );