19
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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>)
19
10
0

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
19
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?