首页 > 解决方案 > Firestore 的 `get()` 是否算作 1 个文档读取?

问题描述

我正在我的应用程序中构建用户对用户的聊天,所以我有点担心 Firestore 的定价。我正在寻找构建数据库的最佳方法,因为我不确定将来是否可以更改它。是否get()算作一次阅读,或者它会为每条消息收取不同的阅读费用?


这就是我所做的,我希望这是最好的方法:

// Set the user's IDs
var userA = 1
var userB = 2

// Naming the conversation
var conversation = (userA < userB ? userA + '_' + userB : userB + '_' + userA)

// Initialize Firebase
firebase.initializeApp()

// Initialize Firestore
var db = firebase.firestore()

// INSERT conversation name to the conversations list of each user
db.collection('users/' + userA + '/conversations').doc(conversation).set({})
db.collection('users/' + userB + '/conversations').doc(conversation).set({})

// SELECT conversations list for userA
db.collection('users/' + userA + '/conversations').get().then((response) => {
  response.forEach((document) => {
    console.log(document.id)
  })
})

// SELECT conversations list for userB
db.collection('users/' + userB + '/conversations').get().then((response) => {
  response.forEach((document) => {
    console.log(document.id)
  })
})

// INSERT message "Hello" from userA
db.collection('conversations/' + conversation + '/messages').add({
  time: firebase.firestore.Timestamp.fromDate(new Date()).seconds,
  user: userA,
  text: 'Hello'
})

// INSERT message "World" from userB
db.collection('conversations/' + conversation + '/messages').add({
  time: firebase.firestore.Timestamp.fromDate(new Date()).seconds,
  user: userB,
  text: 'World'
})

// SELECT messages from conversation
db.collection('conversations/' + conversation + '/messages').get().then((response) => {
  response.forEach((document) => {
    console.log(document.id + ': ' + JSON.stringify(document.data()))
  })
})

标签: firebasegoogle-cloud-firestore

解决方案


当您调用get()集合引用或查询时,该查询匹配的每个文档都需要读取一次。当您调用get()文档参考时,该文档将花费一次阅读。计费是关于阅读文件的数量,而不是你打电话的次数get()


推荐阅读