1
1

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.

Collection Groupでサブコレクションをまとめてクエリ[Firestore]

Last updated at Posted at 2021-01-18

Collection Groupを使うと、異なるドキュメント配下の同名のサブコレクションをまとめてクエリできます。

たとえば、

preference collection:県
 /document(京都、大阪、名古屋、岡山)
  /specialty collection:名物
   /document([name:八ツ橋, type:sweet] [name: たこ焼き, type: meal] [name:ひつまぶし, type: meal] [name:きびだんご, type: sweet])

という階層があったときに、

specialty collectionは別々のpreferenceドキュメントに属していますが、specialtyのくくりでまとめてクエリできます。

#手順

###1,セキュリティルールを追加

グループコレクションでクエリを行うには、途中までのパスがワイルドカードになったruleをFirestoreに追加します。

match /{path=**}/specialty/{document} {
  allow read: if true;
}

###2,グループコレクションでクエリしてみる

Swiftの例は以下。他の言語は公式ドキュメント参照。

let db = Firestore.firestore()

db.collectionGroup("specialty").whereField("type", isEqualTo: "sweet").getDocuments { (snapshot, error) in
    // ...
}

このクエリは失敗します。
なぜなら、Collection Group queryをサポートする Index をFirestore に追加する必要があるからです。

###3,Index を追加
上記クエリを実行すると、コンソールログにクエリに必要なインデックスを追加するためのリンクが表示されます。
ブラウザからそのリンクを開くと、必要なインデックスが自動で追加されます。

Firestoreコンソールから手動で追加することもできます。

3までの手順を実行して、改めて2,のクエリを実行すると、specialtyコレクションのスイーツタイプをもつドキュメントのスナップショットが得られます。

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?