FirebaseのFirestoreを使っていると、whereFieldとorderで違うフィールドを参照したいことがありますよね。
例えば、投稿機能で投稿者(whereField)を絞って、新しい日付順(order)に10件取得したいみたいな 。

で、下のようなコードを書くじゃないですか。

SceneDelegate.swift
let db = Firestore.firestore()
let postsRef = db.collection("posts")
        postsRef
            .order(by: "createdAt", descending: true)
            .whereField("publisher", in: showUsers)
            .limit(to: 10)

で実行すると、

console

Error Domain=FIRFirestoreErrorDomain Code=9 "The query requires an index. You can create it here:



驚く少女

エラーなんですけど〜!



どうやらクエリさんはインデックスを必要としているそうです。

firestoreの仕様だから仕方ないのか....と一旦は諦めましたが、複合インデックスを使えば解決するそうです。





解決策

エラー文言をよく見てみると「...create it here」の次にURLが表示されています。
そのURLをブラウザ上で叩くと、google cloudの複合インデックスを登録するページに遷移します。

複合インデックス登録ページ

このページで複合インデックスを登録すると、登録したインデックスの内容でデータを引っ張ってくることが可能になります。

よかった!