iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
Modern Web

我或許沒那麼懂 Web系列 第 11

Cloud Firestore β: (3) 集合 & 參照

昨天研究完文件,今天來研究集合和參照的概念吧!

集合

正如昨天所述,所有文件都必須存在於集合之中,而集合就是一個作為文件容器的簡單存在。集合不會有任何的欄位與資料,就只是單純的把文件放進來而已。就像是我們可以建立一個名為 users 的集合,然後把儲存使用者資料的文件,以使用者的 ID 為文件名稱,放進這個集合裡,像是這樣:

users: {
  "ruoshi": {
    first : "Ruoshi"
    last : "Lin"
    born : 1900
  }
}

但是在同一個集合裡,文件的 ID 是不能重複的,雖然是常識還是在這邊做個提醒。

而 Cloud Firestore 又不像 SQL 資料庫一樣受到 schema 限制,所以我們可以有完全的彈性自訂文件的欄位,甚至每個文件的欄位、與其型別要不一樣都沒關係。不過在規劃上還是會建議同個集合裡保持一致的資料節夠,這樣在查詢上才不會造成困擾。舉個簡單的例子,明明都是用來儲存名字的欄位,一個叫做 fullname、一個叫做 name,實在是頗為困擾。

另外,在 Cloud Firestore 中,不存在著空集合。也就是當我們把集合裡所有的文件都刪除時,這個集合也就會消失。相對的,我們也不用刻意去建立集合,只要說我要把某個文件放進某個集合裡時,那個集合就會自動被建立。正如前面所說,集合就是一個作為文件容器的簡單存在,沒了文件,這個存在也就消失了。

參照(Reference)

在 Cloud Firestore 資料庫中,每個文件都是透過其位置作為唯一的辨識方法。想要查詢資料就只要建立一個「參照」即可,以前面的資料為目標,透過 JS 和 Ruby 作為範例程式碼做舉例:

let userId = 'ruoshi'
let documentReference = db.collection('users').doc(userId)
user_id = 'ruoshi'
document_reference = firestore.col('users').doc(user_id)

參照的功用就只是指向資料庫的某個位置,而還沒進行查詢,所以我們甚至可以指向一個不存在文件的位置,也因為如此,建立參照本身並不會有任何的網路操作。

而除了參照文件外,我們也可以參照集合,只要把上面範例程式碼第二行敘述的 .doc() 方法拿掉即可,這邊就不再示例。然而,儘管如此,這兩種參照還是不一樣的,我們要將文件的參照和集合的參照是為兩種不一樣的物件,他們提供了不同的查詢介面。像是我們可以在集合參照查詢有什麼文件在這個集合裡,而可以透過文件參照去查詢裡面儲存了什麼資料。也正是在查詢時,才會正式對資料庫提出 Request。


上一篇
Cloud Firestore β: (2) 建立專案 & 文件
下一篇
Cloud Firestore β: (4) 規劃一個聊天室的資料模型
系列文
我或許沒那麼懂 Web31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言