javascript - Firebase SDK 删除整个集合而不是仅删除一个文档

标签 javascript firebase google-cloud-firestore google-cloud-functions

我正在使用 Firebase Cloud FunctionsCloud Firestore(NodeJS + TypeScript 位于顶部)。

我创建了两个集合:appsdevices。我还有 2 个函数:其中一个函数是从 apps 集合中删除应用程序(通过 HTTPS 请求),另一个函数是对该应用程序被删除使用react。第二个函数的工作是删除与已删除的应用程序关联的所有设备(每个设备都有一个“appId”属性)。

我不会发布 HTTPS 的,因为我可以验证它是否正常工作。 我将仅发布 Firestore 数据删除 react :

export const onAppDeleted = functions.firestore
.document("apps/{appId}")
.onDelete((document, context) => {
  const appId = context.params.appId;
  return admin.firestore().collection(COL_DEVICES).where('appId', '==', appId).get()
    .then((results) => {
      const batch = admin.firestore().batch();
      results.forEach((record) => {
        batch.delete(record.ref)
      });
      return batch.commit();
    });
});

问题:此方法会删除整个 devices 集合
预期:仅删除与已删除应用匹配的设备,而不是整个集合

注释:

(1) 可能会发生这种情况,因为我的 devices 集合中只有这一个设备,但仍然...我想保留该集合(是吗?)

(2) 我对 Firestore 和 Cloud Functions 的经验几乎为零,所以如果我的方法有误,请纠正我

最佳答案

集合并不像您想象的那样真正“存在”。如果您将文档写入在控制台中看不到的集合中,则在刷新控制台时它会突然出现 - 它不需要显式创建。同样,如果删除集合中的最后一个文档并刷新控制台,该集合将消失。从这个行为中您可以看出,它们不像文件系统目录那样可以在其中没有文件的情况下存在。

因此,您不需要做任何不同的事情,只需期望该集合在其所有文档消失后就会消失。

关于javascript - Firebase SDK 删除整个集合而不是仅删除一个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537342/

相关文章:

javascript - 如何确定 "X minutes from now"事件的日期

javascript - 为什么 eval() 不适用于 JSON.parse() 的输出?

firebase - iOS 模拟器不支持此浏览器

firebase - 如何从Firebase Flutter中提取带有流的嵌套引用

java - 检查 Firebase 数据库中存在的所有节点中的特定值

firebase - "Cloud Firestore Override a deprecated API "构建flutter应用程序出错

firebase - 如何在同一项目中使用 Cloud Firestore 和实时数据库

javascript - 迭代特定元素的嵌套对象结构

javascript - 在层显示上禁用父页面

firebase - 如何在 Firebase Firestore Collection 中构造版本化数据?