我有一个名为"部门";内部有一个子集合名为";用户";。我想删除"中的所有文档;部门";没有用户子集合中的文档或者没有子集合用户。
关于如何找到要删除的文档,有什么想法吗?
谢谢!
假设您有一个如下所示的结构:
Firestore-root
|
--- departments (collection)
|
--- $departmentId (document)
|
--- users (collection)
|
--- $uid (document)
|
--- //user data
为了能够实现这一点:
我想删除"部门";在CCD_ 1子集合中没有文档。
您必须获取users
子集合中的所有文档并将其删除。但请记住,如果您的集合中有大量文档,Firebase团队并不建议在客户端上执行这样的操作。然而,对于少数文档,它是有效的。
此操作中最重要的一点是,如果删除这些文档,子集合将继续存在,并且已删除的文档将以italic显示。
只有在实时数据库中,如果删除一个节点,就会删除它及其下的所有数据。但事实并非如此,所以不用担心。
要删除没有子集合的文档,必须查询departments
集合并迭代文档以检查其上是否有子集合users
。请参阅下面的示例代码:
const db = getFirestore();
// `departments` reference.
const departmentsRef = query(collection(db, "departments"));
// Gets all documents from the department's reference.
const querySnapshot = await getDocs(departmentsRef);
// Iterate the documents.
querySnapshot.forEach(async (doc) => {
// `users` reference.
const usersRef = query(collection(db, "departments", doc.id, "users"));
// Check if the document has the `users` collection
const querySnapshot = await getDocs(usersRef)
.then((usersDoc) => {
// Check if the `users` subcollection exists
// Also counts the documents of the subcollection.
if (!usersDoc.size) {
// Deletes the document from the document reference.
deleteDoc(doc.ref);
}
});
});