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

时间:2019-12-30 22:03:44

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

我正在玩 Firebase Cloud Functions Cloud 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的经验几乎为零,因此,如果我的方法不正确,请纠正我

1 个答案:

答案 0 :(得分:1)

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

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

相关问题