我正在玩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的经验几乎为零,因此,如果我的方法错误,请更正我]
集合并没有真正按照您的想法“存在”。如果您将文档写入控制台中看不到的集合中,则刷新控制台时会突然出现该文档-无需显式创建。同样,如果删除集合中的最后一个文档并刷新控制台,则该集合将消失。从这种行为可以看出,它们与文件系统目录不一样,文件系统目录可以不存在文件。
因此,您无需做任何不同的事情,只希望该集合的所有文档都消失了之后就消失了。