公式ドキュメント
作りたいデータベース
リファレンス
データベースの場所を指定
let db = Firestore.firestore()
データの取得 (コレクションにある複数のドキュメント)
基本的な取得方法
例「users」というコレクションに含まれる全てのドキュメントを取得
db.collection("users").getDocuments() { (querySnapshot, err) in
//querySnapshot!.documentsでDocumentを配列形式で取得
}
クエリを使用して取得
例「users」というコレクションに含まれ、「age」が20であるドキュメントを取得
db.collection("users").whereField("age", isEqualTo: 20).getDocuments() { (querySnapshot, err) in
//querySnapshot!.documentsでDocumentを配列形式で取得
}
データの取得 (特定のドキュメント)
コレクションとドキュメントIDを指定して、特定のドキュメントのみ取得することもできます。
db.collection("user").document(userID).getDocument() { (querySnapshot, error) in
//querySnapshot!.dataで1つのDocumentを取得
}
struct(構造体)
データモデルの考え方と同じ
//構造体で保持したい値を指定
struct ChatRoom {
let roomID:String
let userID:String
}
//データを指定して構造体のインスタンスを作成
let data = ChatRoom(roomID:"XXXX", userID:"XXXX")
for文
「for 変数名 in 配列」と書くとその中のコードが配列の数だけ実行され、指定された変数名で配列の中身を取得できる。
1回目の実行では、変数に配列の1番目が代入され、
2回目の実行では、変数に配列の2番目が代入され…..
let companyList = ["google","amazon","facebook","apple"]
var count = 0
for company in copmanyList {
print(\(count).company)
count += 1
}
//結果 0.google 1.amazon 2.facebook 3.apple
完成したコード
import Foundation
import Firebase
class DatabaseHelper {
let uid = AuthHelper().uid()
let db = Firestore.firestore()
func getMyRoomList(result:@escaping([ChatRoom]) -> Void){
var roomList:[ChatRoom] = []
db.collection("room").whereField("user", arrayContains: uid).addSnapshotListener({
(querySnapshot, error) in
if error == nil {
for doc in querySnapshot!.documents {
let data = doc.data()
guard let users = data["user"] as? [String] else { return }
if users.count != 2 { return }
var user = ""
if users[0] == self.uid {
user = users[1]
} else {
user = users[0]
}
roomList.append(ChatRoom(roomID:doc.documentID, userID: user))
}
result(roomList)
}
})
}
func getUserInfo(userID:String,result:@escaping(String) -> Void){
db.collection("user").document(userID).getDocument(completion: {
(querySnapshot, error) in
if error == nil {
let data = querySnapshot?.data()
guard let name = data!["name"] as! String? else {
result("")
return
}
result(name)
} else {
result("")
}
})
}
}
struct ChatRoom {
let roomID:String
let userID:String
}
コメント