代码之家  ›  专栏  ›  技术社区  ›  milosmns cmcginty

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

  •  0
  • milosmns cmcginty  · 技术社区  · 6 年前

    我在玩 Firebase云函数 和 云火库 (上面是NodeJS+TypeScript)。

    我创建了两个集合: apps 和 devices . 我还有两个功能:我的一个功能是从 应用程序 集合(通过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();
        });
    });
    

    问题:这种方法删除整个 设备 收集
    应为:仅删除与已删除应用程序匹配的设备,而不是整个集合

    笔记:

    (1) 可能是因为我只有一个设备 设备 收藏,但仍然。。。我想保留这些收藏品(是吗?)

    (2) 我在Firestore&Cloud功能方面几乎没有经验,所以如果我的方法错误,请纠正我

    1 回复  |  直到 6 年前
        1
  •  1
  •   Doug Stevenson    6 年前

    收藏并不是真的以你所思考的方式“存在”。如果将文档写入在控制台中看不到的集合中,则刷新控制台时它会突然出现—不需要显式创建它。类似地,如果删除集合中的最后一个文档并刷新控制台,则集合将消失。从这种行为中可以看出,它们与文件系统目录不一样,它们可以不包含文件。

    所以,你没必要做任何不同的事情,只要期待收藏在所有文档都消失后消失就行了。

    推荐文章