1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Firestoreのタイムアウトについて

Last updated at Posted at 2020-02-02

背景

みなさん、Firebaseは使っていますか?
簡単なアプリケーション作成に必要な機能が揃っていてとても便利ですよね。
私もとても素晴らしいサービスだと考えているのですが、公式ドキュメントをちらっと読んだ感じだと気付かなさそうな仕様があり、今回はそれを共有させて頂きたいと思います。

問題

以下のコードを見てください。
CollectionにあるDocumentを全件取得するコードです。

docs = db.collection(u'cities').stream()

for doc in docs:
    print(u'{} => {}'.format(doc.id, doc.to_dict()))

出典:公式ドキュメント

では、このコードを下のように変更するとどうなるでしょうか。

docs = db.collection(u'cities').stream()

for doc in docs:
    #nanka omoi syori
    time.sleep(100)
    print(u'{} => {}'.format(doc.id, doc.to_dict()))

このようにして実行してみると、最初の一件以外出力されていないことが確認できると思います。

解決策

取得するべきdocumentの中身が小さく、そこまで量もない場合には、例えば次のようにして一度全件取得すれば良いでしょう。

docs = [doc.id for doc in db.collection(u'cities').stream()]

for doc_id in docs:
    #nanka omoi syori
    time.sleep(100)
    print(doc_id)

巨大Collectionを取得したい場合もあると思います。
その場合には以下のリンクを参考にしてクエリカーソルを使用していただければと思います。
stack overflowの質問
クエリカーソルについての公式ドキュメント

最後に

この件について記載のあるQiita記事等の日本語資料を探してみたのですが、全くヒットしませんでした...:cry:(2020/2/2時点)
この件はアプリケーションの種類によってはクリティカルになりうると思うので、これからFirebaseを勉強しようと思っている、または、実務で使うかもしれない方々の学習の一助になれば幸いです。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?