今天就來研究怎麼開始用 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)
}
)