iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
0
Modern Web

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

Cloud Firestore β (11): 基礎查詢

今天就來研究怎麼開始用 SDK 在 Cloud Firestore 簡單地查詢資料吧。

獲取單個文件

要獲取單個文件,首先針對取得參照,再來呼叫文件參照的 get() 方法取得 Promise 物件,接著就可以對 .then() 傳遞一個函式,而該函式得到的實現值(fullfillment value)即為一個文件快照(Document Snapshot)。

我們可以透過文件快照的 exists 屬性去確認這個文件是否存在,若是存在就可以透過 data() 取得該文件的所有資料。如下所示:

let cityRef = db.collection('cities').doc('Taichung')
cityRef.get().then(docSnapshot => {
  if (docSnapshot.exists) {
    let city = docSnapshot.data()
    console.log('Document data:', city)
  } else {
    console.log('No such document!')
  }
})
.catch(err => {
  console.log('Error getting document', err)
})

從一個集合中獲取所有文件

若是要取得一個集合中的所有文件,可以直接對集合的參照呼叫 get() 方法取得 Promise 物件,接著就可以對 .then() 傳遞一個函式,而該函式得到的實現值(fullfillment value)即為一個查詢快照(Query Snapshot)。

接著我們就可以呼叫查詢快照的 forEach() 方法,並傳遞一個會得到文件快照的回呼函式,如此我們就可以透過迭代處理這些文件快照。由於透過查詢快照的 forEach() 得到的文件快照一定都是存在的,所以不用另外做檢查。

若是想知道這次查詢是否得到任何文件,可以透過 empty 屬性的值暸解,或是透過 size 取得這次查詢所得到文件的筆數。

let citiesRef = db.collection('cities')
citiesRef.get().then(querySnapshot => {
  if (querySnapshot.empty) {
    console.log('There is no document in this query')
    return
  }
  querySnapshot.forEach(docSnapshot => {
    let city = docSnapshot.data()
    console.log(docSnapshot.id, ' => ', city)
  })
})

從一個集合中獲取部分文件

若要只取得一個集合中其中一部分的文件,可以呼叫集合參照的 where() 方法限定條件,呼叫該方法時分別傳遞欄位名稱、運算子、數值三個參數即可。

let citiesRef = db.collection('cities')
let capitalsQuery = citiesRef.where('capital', '==', true)
capitalsQuery.get().then(querySnapshot => {
    querySnapshot.forEach(docSnapshot => {
      let capital = docSnapshot.data()
      console.log(docSnapshot.id, ' => ', capital)
    }) 
  })
  .catch(err => {
    console.log('Error getting documents', err) 
  }
) 

上一篇
Cloud Firestore β (10): 刪除資料
下一篇
Cloud Firestore β (12): 初始化
系列文
我或許沒那麼懂 Web31

尚未有邦友留言

立即登入留言