🦔

CollectionGroupで同名の collection をまとめて取得して、そこからのwhereで詰まった

2022/08/13に公開

タイトルにあるようにCollectionGroupで同名の collection をまとめて取得して、そこからのwhere('xx', isEqualTo:'xx').get();的なことをしようとしたら

operation was rejected because the system is not in a state required for the operation's execution. if performing a query, ensure it has been indexed via the firebase console.

って怒られて結構困ったので、その解決方法を書きたいと思います。

怒られた記述↓↓↓

      final result =
      await FirebaseFirestore.instance.collectionGroup('masks').where('imageUrl', isEqualTo:
      'xxxxxx').get();

まず最初にCloud Firestoreでインデックスを作りました。

【インデックスを作る手順】
①Firestore Databaseを開くと「データ」の画面が出てくるので、画像のように「インデックス」を選択

②「インデックス作成」を選択
(既にプロジェクトで作ったことがある場合は、表示のされ方が違います)

③自分のデータに合わせて、インデックスを作成する
データ

インデックス

数分経つとステータスが「ビルド中…」から「有効」に変わります。

インデックスを作成した後、以下のように記述したら、うまくデータを取得できました!

うまくいった記述↓↓↓

    final result =
      await FirebaseFirestore.instance.collectionGroup('masks').where('imageUrl', isEqualTo:
      'xxxxx').orderBy('size',descending: true).get();

どなたかの一助となれば幸いです!

Discussion