使用PHP SDK getIterator限制DynamoDB

时间:2014-05-28 14:13:28

标签: php amazon-dynamodb

我想只检索表格'通知'。

的最后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个。

2 个答案:

答案 0 :(得分:2)

Limit参数不限制迭代器,它是传递给Scan操作的参数。这基本上导致迭代器产生大量请求,每个请求只返回10个项目。要限制迭代器,您还需要使用getIteratorsee 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 ) );