Firestore データの追加 現在時刻を配列に格納する (Swift)


現在時刻を何度も取得して、Firestoreドキュメントの配列に格納していくやり方で困ったので、メモ&共有。

ポイント1. 現在時刻はTimestamp(date: Date())で取得。

Fieldvalue.timestamp() で時刻を取得することもできるんですが、
これをFirestoreのTimestamp配列フィールドに入れようとするとエラーになります。

2020年3月時点では、Fieldvalue.timestamp()は配列に対応していないようです。

よって、公式ドキュメントにさらっと書いてある「Timestamp(date: Date())」で現在時刻を取得してTimestamp配列に入れると、こちらは問題なし。

ポイント2.arrayUnionは配列の新規作成でも使える

公式ドキュメントでは、arrayUnionは「配列がある場合に」と記載されていますが、以下のように、配列がない場合でも1番目の配列要素を作成してくれました。

以上、ご参考まで。

    let historyRef = db.collection("history").document(String(user!.uid))

    historyRef.setData([
        "userid" : String(user!.uid),//ユーザID
        "objectid" : objectid,
        //arrayUnionで、初回配列がない場合でもた1個目の配列要素を自動で追加してくれる
        "history" : FieldValue.arrayUnion([Timestamp(date: Date())])
    ], merge: true
        ) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            print("Document added with ID")
        }
    }