[firestore]Nested arrays are not supportedエラーが出る原因と対処法

[firestore]Nested arrays are not supportedの原因と対処法 プログラミング

こんにちは!
最近firebaseの便利さにやっと気付き、勉強真っ盛りなうみぶどうです。

今回は、firebaseのデータベース機能、firestoreを色々と触る中で、
Nested arrays are not supported
というエラーに遭遇しましたので、その原因と対処法について調べました!

意外と日本語での解説が見つからなかったので、
同じエラーで躓いた誰かの為になれば幸いです!

概要

今回、vue.js + firestore の組み合わせで開発を行っていたところ、
テーブルのデータをfirestoreに突っ込むところで、
Nested arrays are not supported
のエラーが発生しました。

ネストされた配列はサポートされてませんよーって事ですね^^;

Nested arrays are not supportedの原因

今回このエラーに遭遇して調べて初めて知ったのですが、
firestoreではネストされたオブジェクトは扱えても、
ネストされた配列は扱えないようです^^;

保存しようとしたデータを見てみたら、見事にネストされた配列がありました^^;

扱えるオブジェクトの例

以下のコードのようなネストされたオブジェクトは保存できるのですが・・・

const saveData = {
  data1: {
    text: "data1"
  },
  data2: {
    text: "data2"
  },
  data3: {
    text: "data3"
  }
}

扱えない配列の例

以下のようなテーブルデータ等でよく使う、
配列の中に配列があるデータは扱えないようです^^;

const saveData = [
  ['県名','県庁所在地','市外局番'],
  ['東京都','新宿区','03'],
  ['愛知県','名古屋市','052']
]

Nested arrays are not supportedの対処法

今回のエラーの原因はネストされた配列があったからという事で、
配列をオブジェクトに変換する事で解決出来ました!

配列をオブジェクトに変換する関数

以下のような配列をforで回し、新しいオブジェクトとして返す関数を作成する事で、
自分の場合は解決できました(・∀・)

formatNestedArray(arr) {
  let obj = {};
  for(let i = 0; i < arr.length; i++) {
    obj[i] = arr[i];
  }
  return obj;
}

まとめ

今回の件で、firestoreではネストされた配列は扱えないという事を学びました!
今後firestoreを使っていく際に、保存するデータにはネストされた配列を含まないよう設計していくのが大事かもしれないですね!

firestore側で、自動で0から連番振ってオブジェクト的な扱いにしてくれればいいのになーとも思うのですが、何かしら出来ない理由があるんでしょうね・・・。

コメント

タイトルとURLをコピーしました