我正在玩 Firebase Cloud Functions 和 Cloud Firestore (顶部是NodeJS + TypeScript)。
我创建了两个集合:apps
和devices
。我还有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的经验几乎为零,因此,如果我的方法不正确,请纠正我
答案 0 :(得分:1)
收藏集并没有真正按照您的想法“存在”。如果将文档写到控制台中看不到的集合中,则刷新控制台时会突然出现该文档-无需显式创建。同样,如果删除集合中的最后一个文档并刷新控制台,则该集合将消失。从这种行为可以看出,它们与文件系统目录不一样,文件系统目录可以不存在文件。
因此,您无需做任何不同的事情,只希望集合中的所有文档都消失后即可消失。