因为Firestore中没有像MYSQL那样的外键功能,所以我不能复制我的一个重要功能,那就是在一个地方更新文件,它将反映在每个地方。此外,Firebase没有一次更新所有文档特定文件的功能。
已经有这样的问题了,但我无法得到我的解决方案。假设我有一百万个文档,其中包含一个文件,它是材料的密度。后来,我发现我的密度值是错误的,所以如何有效地更新所有文档中的值。另外,我不想使用server/admin SDK。
发布于 2020-08-29 06:50:19
如果需要更改100万个文档的内容,则需要查询这100万个文档,迭代结果,然后逐个更新这100万个文档。
没有等价的sql "update where“语句可以在一个查询中更新多个文档。它需要对每个文档进行一次更新。
发布于 2020-08-29 08:40:59
如果不想使用Admin SDK,那么您可以选择更新客户端上densityMaterial
属性的值,这可能不是最好的解决方案。但是,如果您可以将更新操作划分为较小的块,则可能会成功。
如果您使用POJO类来映射每个文档,那么您可能会对我在以下帖子中的回答感兴趣:
How to update one field from all documents using POJO in Firestore?
如果你没有使用POJO类,请查看我在以下帖子中的回答:
关于成本,您将为每个更新的文档支付一次写操作。如果所有1个MIL文档都将更新,则将向您收取1个MIL写入操作的费用。
编辑:
假设我有一百万个文档,其中包含一个文件,这个文件的密度是材料的密度。,
。后来,我发现我的密度值是错误的,所以如何有效地更新所有文档中的值。
如果所有这1MIL文档都包含一个名为densityMaterial
的属性,该属性具有完全相同的值,那么将该属性存储在每个文档中就没有任何意义。您可以创建包含该特定值的单个文档,并且在这1个MIL的每个文档中,只需添加对该文档的引用。DocumentReference是supported data-type。现在,如果您需要更改该值,它将仅导致单次文档写入。
但是,如果densityMaterial
属性有不同的值,并且所有值都是错误的,那么数据库没有问题,添加数据的机制/人员有问题。如果您添加了1个MIL不正确的文档,这不是数据库问题。
为什么不选择MySQL?
MySQL不能像Cloud Firestore那样扩展。Firestore只是简单地进行大规模扩展。
我能避免这个问题吗?
是的,您可以使用单个文档购买此类详细信息。
https://stackoverflow.com/questions/63644062
复制相似问题