現在時刻を何度も取得して、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")
}
}