限制在DynamoDB中使用PHP SDK getIterator



我只想检索表'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 ) );

相关内容

  • 没有找到相关文章

最新更新