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

问题描述 投票:0回答:1

我正在玩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的经验几乎为零,因此,如果我的方法错误,请更正我]

firebase google-cloud-firestore google-cloud-functions
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.