FirestoreのFieldにReferenceを入れちゃう
CloudFirestoreはRealtime DBより多くの型をDBに保存できます。
DocumentReference
自体をFirestoreに保存できることがわかったので紹介します。


データを取得する
Pringを使ってUserを取得することこんな感じで返ってくる
User.get("nnuqWHOddo640SPbyHXU") { (user, error) in
print(user)
}
Optional(User {
id: nnuqWHOddo640SPbyHXU
createdAt: 2017-12-20 01:50:33 +0000
updatedAt: 2017-12-20 01:50:33 +0000
type: UserType
name: Optional("hoge")
thumbnail: nil
isDeleted: false
itemIDs: []
followers: Sample.ReferenceCollection<Sample.User>
friends: Sample.ReferenceCollection<Sample.User>
items: Sample.NestedCollection<Sample.Item>
group: Sample.Reference<Sample.Group>
})
生でFirestoreを叩くとこんな感じ
User.reference.document("nnuqWHOddo640SPbyHXU").getDocument { (snapshot, error) in
print(snapshot?.data())
}
Optional(["name": hoge, "isDeleted": 0, "createdAt": 2017-12-20 01:50:33 +0000, "updatedAt": 2017-12-20 01:50:33 +0000, "followers": {
count = 0;
}, "friends": {
count = 0;
}, "items": {
count = 0;
}, "group": <FIRDocumentReference: 0x60000123a460>])
PringでがReferece型でラップしてますが、SnapshotにはDocumentReference
が含まれてることがわかる。
Whereもできた
WhereはDocumentReference
で入れる。
User.where("group", isEqualTo: Group(id: "6MRhrD5IQd62xxrg84RI").reference).get { (snapshot, error) in
print(snapshot?.documents.first)
}
Optional(<FIRDocumentSnapshot: 0x60000145c3e0>)