以下是我与Firestore有关的问题的简化描述:
我的收藏中有物品文档。
ItemsCollection
ItemDoc1
someField1: someValue
someField2: someValue
ItemDoc2
someField1: someValue
someField2: someValue
ItemDoc3
someField1: someValue
someField2: someValue
现在,我从每隔几秒钟轮询一次的API中获取项目的更新列表,并且每次轮询时我都希望将更新后的项目状态写入Firestore。
例如,初始API调用返回
[
ItemDoc1
someField1: someValue
someField2: someValue
ItemDoc2
someField1: someValue
someField2: someValue
ItemDoc3
someField1: someValue
someField2: someValue
]
因此,当将其写入Firestore时,Firestore的状态就是我上面写的状态。
现在,几秒钟后,将进行新的API调用,响应为
[
ItemDoc1
someField1: someValue
someField2: someValue
ItemDoc2
someField1: *differentValue*
someField2: someValue
]
我需要的是在写入Firestore时会发生以下情况:
我找不到写这种代码的好方法。
到目前为止,我尝试过的是: 我创建了一个批处理,并为API响应中的每个项目创建了一个文档引用,并向该批处理添加了一个 set 命令。实际上,由于批次限制为500个项目,而且我可能拥有更多,所以我将文档拆分为500个项目的块,然后为每个块创建一个单独的批次,然后并行运行所有批次。 结果-未更改的项目不会被重写,更改的项目将按预期进行更新。但是,丢失的项目(ItemDoc3)不会被删除,因为到目前为止我只执行过 set 命令。为了识别删除,我必须单独保存当前的项目ID,并且每次收到新的API响应时,我都要计算自己删除的内容,然后调用 delete 。
这非常麻烦。是否有一些不错的方法来设置整个集合,以便我可以立即获得所需的行为?我认为在Firestore中这是微不足道的
答案 0 :(得分:1)
没有Firestore API可以用新内容替换整个集合。尽管您可以file a feature request这样做,但我怀疑它会在任何时候立即添加,因为根据我的经验这是一个非常不常见的API请求。
我看到两种实现您的用例的常用方法:
听起来您已经在做#2。如果您在进行这项工作时遇到麻烦,而不能使用#1,那么如果显示minimal code that reproduces the problem,我们可能会更好地为您提供帮助。