NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
81 stars 18 forks source link

php-ncmbを利用してInstallationデータを1000件以上取得したい #1322

Closed umi9908 closed 1 year ago

umi9908 commented 1 year ago

現在、php-ncmbを利用して「ニフクラ mobile backend」のInstallationに保存しているデータを取得しています。 取得する時にデータ件数が1000件を超えてしまい一括で取得することができなくなってきました。

ncmb-utilsで1000件以上のデータの取得方法は 拝見させていただきました。 このPHP版はありませんでしょうか。 また、サンプル等ございましたらご教授いただきたいです。 何卒よろしくお願い申し上げます。

goofmint commented 1 year ago

一度に取得できるのは1,000件までなので、limitとskipを使ってみてください。

// コードは適当です。 `new Installation()` ではないかも知れません
$query = new Installation();
$query->skip(1000); // 1,000件飛ばす
$query->limit(1000); // その後の1,000件を取得
$foundObjs = $query->find();

$foundObjsが1,000件ある場合は、さらにskipを増やして再取得すれば良いかと思います。

umi9908 commented 1 year ago

phpではcountで検索条件の件数は取得できないという認識で合っておりますでしょうか。

for (let i = 0; i < max; i += 1) {
          promises.push(data
            .limit(1000)
            .skip(i * 1000)
            .fetchAll());
        }

のように件数を数えて必要分だけskipを行わなくても

// 900件の場合
$InsObj = new Installation();
$query = new Query();
$query->limit(1000);
$query->orderBy('createDate');

$users = $InsObj->find($query); //900件を取得
$query->skip(1000); // 1,000件飛ばす
$users2 = $InsObj->find($query); //取得されるデータはなにもなし

$arr = array_merge($users,$users2);

このようにして最後$usersと$users2を結合すればいいという考えで合っておりますでしょうか。

goofmint commented 1 year ago

件数が分かっているのであれば、あえて数える必要はないかと思います。

umi9908 commented 1 year ago

ありがとうございます。 数える必要がひとまずなさそうなので、(件数把握ができているので) ひとまずskipで対処を行ってみます。

即座にご対応くださり本当にありがとうございました。