Firestoreでデータゴリゴリ作ってたらこんなエラーが出ましたよ。
too many builtin index entries for entity
インデックス作りすぎってこと?一つのドキュメントに大量にデータを登録するというテストを行なっていたのだが、ドキュメントは一つなのでインデックスは増えないと思うんだけどなあ。と思っていましたがどうやらマップの中のフィールドにもインデックスが自動で作成されるもよう。すごい。でもそのせいで制限に引っ掛かる。すごい迷惑。
具体的には以下のようなドキュメントがあった場合、nameやcreatedだけではなく、users[key].idにもusers[key].nameにもusers[key].birthdayにもusers[key].profileにもインデックスが作成されているということ。
{
"name": "qiita",
"created": "2019-03-11 20:37:10"
"users": {
"user01": {
id: "user01",
name: "yuiken",
birthday: "1970-01-01 00:00:00",
profile: "すごいけどすごい迷惑"
},
"user02": {},
"user03": {},
,,,//たくさんあるということにする
}
}
なのでusersの中が1000件とかあるとインデックスは1000 x フィールド数になってインデックス多すぎエラーが出てしまう。具体的な上限の数字はわかりませんが今回のテストでは2300 x 8ぐらいで上記のエラーが出ました。
Firebaseのコンソールでインデックスの除外設定が出来るので、usersのフィールド毎に設定します。上記のドキュメントがthreadコレクションにあるとしてusers[key].idのインデックスを設定するには下記のように入力します。
これでインデックス多すぎ制限を回避できました。よかったよかった。
これドキュメントあたったわけではなくて、テストしてみたらこういう結果だったという話なので、根拠はこの記事を書いた時の私の体験談のみ。あと、もちろんインデックス削除したら他にもいろいろ影響出ますのでよく考えてからどうぞ。以上よろしく!
