

**質問内容**  
Firestoreに2次元配列を保存し、保存後に１次元配列を追加するサンプルプログラムを作りたいのですが、以下のエラーに対処できません。対処方法について、アドバイスいただけないでしょうか。

まず、エラー文は以下の画像の通りで、"Nested Arrays are not supported" とあります。  
これはつまり、2次元配列は保存できないよ という意味でしょうか。  
[![画像の説明をここに入力](https://i.stack.imgur.com/CkFi5.png)](https://i.stack.imgur.com/CkFi5.png)

私が以下のテストコードでやりたかったことは、以下の通りです。  
新規保存ボタンでは、 workername: [[sh, sm, eh, em]] を保存  
追加ボタンでは、 workername: [sh, sm, eh, em] をを追加し、  
workername: [[sh, sm, eh, em],[sh, sm, eh, em]] というデータする

以上、よろしくお願いいたします。

**テストコード**

[code]

    import SwiftUI
    import Firebase
    import FirebaseFirestoreSwift
    import FirebaseFirestore
    
    struct ContentView: View {
        
        @State var name = ""
        @State var sh = ""
        @State var sm = ""
        @State var eh = ""
        @State var em = ""
        
        var body: some View {
    
            VStack {
                Group {
                    TextField("氏名を入力", text: $name)
                    TextField("S時", text: $sh)
                    TextField("S分", text: $sm)
                    TextField("E時", text: $eh)
                    TextField("E分", text: $em)
                }
                //-------------------------------------------------------------------------
                Button(action: {
                    let db = Firestore.firestore()
                    db.collection("collectionnameX").document("docmentnameX").setData([
                        name: [[sh, sm, eh, em]]
                    
                    ]) { err in
                        if let err = err {
                            print("Error writing document: \(err)")
                        } else {
                            print("Document successfully written!")
                        }
                    }
                }){
                    Text("新規保存")
                        .border(Color.red, width: 1)
                }
                //-------------------------------------------------------------------------
                Button(action: {
                    let db = Firestore.firestore()
                    db.collection("collectionnameX").document("docmentnameX").updateData([
                        name: FieldValue.arrayUnion([sh, sm, eh, em])
                    ]) { err in
                        if let err = err {
                            print("Error writing document: \(err)")
                        } else {
                            print("Document successfully written!")
                        }
                    }
                }){
                    Text("追加")
                        .border(Color.red, width: 1)
                }
                
            }
    
        }
    }
    
[/code]


CC BY-SA 4.0
2021-06-04T02:47:59.863
77322
2021-06-04T10:09:23.543
45415
question
swift firebase swiftui
SwiftUIでFirestoreに2次元配列を保存する方法について


> まず、エラー文は以下の画像の通りで、"Nested Arrays are not supported" とあります。

Firebaseの公式ドキュメントに明記されているようです。

[データ型](https://firebase.google.com/docs/firestore/manage-data/data-
types?hl=ja#data_types)

> 配列の要素として他の配列値を格納することはできません。

ネストされた配列と言うのは、あなたがおっしゃるところの「二次元配列」になりますが、そのようなものを格納することはできない、と言うことですね。

* * *

仕様上は許されていても、「何番目はどんな意味を持つ」と言うことが決まっているデータを配列にしてしまうのは、データ設計上も好ましいものではありません。マップ(いわゆる辞書型)の配列は許されているようなので、そちらを使用すると言うのが一つの手でしょう。

新規保存:

[code]

            db.collection("collectionnameX").document("docmentnameX").setData([
                name: [["sh": sh, "sm": sm, "eh": eh, "em": em]]
            ]) { err in
                if let err = err {
                    print("Error writing document: \(err)")
                } else {
                    print("Document successfully written!")
                }
            }
    
[/code]

追加:

[code]

            db.collection("collectionnameX").document("docmentnameX").updateData([
                name: FieldValue.arrayUnion([["sh": sh, "sm": sm, "eh": eh, "em": em]])
            ]) { err in
                if let err = err {
                    print("Error writing document: \(err)")
                } else {
                    print("Document successfully written!")
                }
            }
    
[/code]


CC BY-SA 4.0
2021-06-04T10:09:23.543
77337
2021-06-04T10:09:23.543
13972
77322
answer