LoginSignup
10

More than 5 years have passed since last update.

FirestoreはFieldにReferenceを持つことができる。

Posted at

FirestoreのFieldにReferenceを入れちゃう

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

スクリーンショット 2017-12-20 11.11.16.png

スクリーンショット 2017-12-20 11.12.40.png

データを取得する

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>)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10