node.js - 如何在 Cloud Firestore 中使用批处理写入 500 多个文档?
问题描述
我正在尝试更新 500 多个文档,例如 1000 到 2000 个文档,我只知道如何对 500 个文档使用批处理我想问一下如何使用 cloud firestore 更新 500 多个文档。这是我尝试更新 500 个文档的方法文件。我正在尝试更新 1000 个文档的 ms_timestamp。谁能告诉我如何使用批量写入来做到这一点
const batch = db.batch();
const campSnapshot = await db
.collection("camp")
.where("status", "in", ["PENDING", "CONFIRMED"])
.get();
await db.collection("camping").doc(getISO8601Date()).set({
trigger: campSnapshot.docs.length,
});
campSnapshot.forEach((docs) => {
const object = docs.data();
object.ms_timestamp = momentTz().tz("Asia/Kolkata").valueOf();
batch.set(
db.collection("camp").doc(docs.get("campId")),
object,
{ merge: true }
);
});
await Promise.all([batch.commit()]);
解决方案
Cloud Firestore 在执行事务或批量写入时施加了 500 个文档的限制,您无法更改此设置,但解决方法可能会奏效。
我不是网络开发专家,所以我根据我作为移动应用程序开发人员的观点分享一个建议。
- 创建一个集合,该集合存储有关特定集合中包含多少文档的计数器。当在该特定集合中触发事件(无论是创建、更新或删除)时,我通过 Cloud Functions/其他方法更新计数器。计数器应该是原子的且一致的,您可以在此处利用 Cloud Firestore 事务。
- 在执行批量写入之前获取计数器值。在这里,我会知道有多少数据/对象/文档需要更新。
- 创建一个初始值为0的偏移量。偏移量用于标记数据。批量写入最多只能对 500 个文档执行,所以如果我想再次对 501-1000 的文档/数据执行批量写入,那么偏移量将为 500,依此类推。
- 调用使用定义的偏移量递归执行批量写入的方法,直到它完全等于计数器 - 1。
我没有测试这个,因为我现在没有足够的时间,但我认为它会起作用。
不明白的可以评论,我很乐意为您提供进一步的帮助。
推荐阅读
- python - 将终端文件参数传递给python脚本
- scala - Spark SQL 将正常的内部连接检测为交叉连接
- r - 为什么调用`detach`会导致R“忘记”函数?
- c - 可有效存储在 tar 存档标头的大小字段中的最大无符号整数是多少
- python - 我应该使用
或者 (或者 ) 用于 RFID 扫描? - rust - 在 Rc 包装的对象中调用可变方法的标准方法是什么?
- node.js - 'Got Object' exception in GraphQL schema definition
- excel - 带有滑动窗口的 Excel 动态图表数据选择
- java - Azure Spring Boot 部署 - 容器问题
- javascript - How does the Object.assign function work?