【问题标题】:Firebase SDK deletes the whole collection instead of deleting only one documentFirebase SDK 删除整个集合而不是只删除一个文档
【发布时间】:2019-12-30 22:03:44
【问题描述】:

我在玩 Firebase Cloud FunctionsCloud Firestore(NodeJS + TypeScript 在上面)。

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

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

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 google-cloud-firestore google-cloud-functions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2021-07-07
      相关资源
      最近更新 更多