经过大量搜索,我在阅读 Firebase 集合时发现了很多“不该做什么”(主要例子是 3 万美元账单事件),但是我正在努力寻找合适的解决方案我们的问题。
我们的网站包含产品目录。该目录由名为“products”的 firestore 集合填充,JSON 结构如下:
"products"{
"productId"{
"name":
"price":
"brand":
...
}
}
Run Code Online (Sandbox Code Playgroud)
为了加载集合,我使用以下命令:
this.products = this.db.collection('products').valueChanges({idField: 'productID'});
Run Code Online (Sandbox Code Playgroud)
在高峰期,我们预计该系列将包含多达 2000 种产品。我担心的是,随着网站规模的扩大,这将变得极其昂贵。我注意到每次导航到“目录”页面时,它都会再次加载集合。因此,举一个有点难以想象的例子,如果页面一天加载 5000 次并加载完整集合,就像现在一样,它将导致 10,000,000 次文档读取(至少)。
我确信一定有更好的方法来做到这一点,但是,我似乎无法破解它。
非常感谢任何关于更好的方法来解决这个问题并降低成本的建议。
我有一个基本的数据库,它本质上在用户下面存储了一系列产品 ID。用户可以选择要添加到数组中的产品,因此使用“arrayUnion”是有意义的,因此我避免不断读取和重写数组,但是,我不断收到错误 *“属性 'firestore' 不存在于类型 ' Firebase 命名空间'。”
我遵循了在以下位置找到的文档:https : //firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array但我担心我仍然在错误地使用它。
我更新数组的代码是:
addToPad(notepadName: string){
const updateRef = this.db.collection('users').doc(this.activeUserID).collection('notepads').doc(notepadName);
updateRef.update({
products: firebase.firestore.FieldValue.arrayUnion(this.productId)
});
}
Run Code Online (Sandbox Code Playgroud)