谷歌数据存储gql查询与限制和偏移游标?

时间:2017-08-15 08:19:00

标签: google-cloud-datastore gql

我试图将游标用于大型结果集。该文档表明你可以使用PHP使用GQL查询游标,但我似乎无法使它工作。

有人有这个工作吗?如果它不能与GQL查询一起使用,有人可以向我展示一个如何实现它的示例吗?

<input type="hidden" :value="someData" >

1 个答案:

答案 0 :(得分:0)

我想出来了。我无法从GQL查询中找到这个。但是可以从普通查询中获得。

希望这可以帮助某人,因为谷歌文档真的很糟糕的例子。

$datastore = new Google\Cloud\Datastore\DatastoreClient([
    'projectId' => $projectId,
]); 


    function cursor_paging($datastore, $queryKind, $pageSize, $parm1, $startDate, $endDate, $pageCursor = '')
    {

        $query = $datastore->query()
            ->kind($queryKind)
            ->filter('field1', '=', $parm1)
            ->filter('date', '>=', $startDate)
            ->filter('date', '<', $endDate)
            ->limit($pageSize)
            ->start($pageCursor);       

        $result = $datastore->runQuery($query);
        $nextPageCursor = '';
        $entities = [];

        foreach ($result as $entity) {
            $nextPageCursor = $entity->cursor();
            $entities[] = $entity;
        }
        return array(
            'nextPageCursor' => $nextPageCursor,
            'entities' => $entities
        );

    }

这是我使用谷歌云数据存储区php文档中提供的此功能的方式。

    $pageSize = 500;
    $queryKind = "your_kind";
    $result = cursor_paging($datastore, $queryKind, $pageSize, $currentThermostat, $startDate, $endDate);

    $countRows = 0;

    for ($x=0; $x < $pageSize; $x++) {

        $counter = 0;

        foreach ($result['entities'] as $item) {
            print($countRows . " " . $item['data']);
            $countRows++;
            $counter++;
        }

        $result = cursor_paging($datastore, $queryKind, $pageSize, $currentThermostat, $startDate, $endDate, $result['nextPageCursor']);

        if ($counter > 0) {
            $x = 0;
        } else {
            $x = $pageSize;  //exit loop when no more results
        }
    }