我正在使用 Firebase Cloud Functions 和 Cloud Firestore(NodeJS + TypeScript 位于顶部)。
我创建了两个集合:apps
和 devices
。我还有 2 个函数:其中一个函数是从 apps
集合中删除应用程序(通过 HTTPS 请求),另一个函数是对该应用程序被删除使用react。第二个函数的工作是删除与已删除的应用程序关联的所有设备(每个设备都有一个“appId”属性)。
我不会发布 HTTPS 的,因为我可以验证它是否正常工作。 我将仅发布 Firestore 数据删除 react :
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 的经验几乎为零,所以如果我的方法有误,请纠正我
最佳答案
集合并不像您想象的那样真正“存在”。如果您将文档写入在控制台中看不到的集合中,则在刷新控制台时它会突然出现 - 它不需要显式创建。同样,如果删除集合中的最后一个文档并刷新控制台,该集合将消失。从这个行为中您可以看出,它们不像文件系统目录那样可以在其中没有文件的情况下存在。
因此,您不需要做任何不同的事情,只需期望该集合在其所有文档消失后就会消失。
关于javascript - Firebase SDK 删除整个集合而不是仅删除一个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537342/