Firebase:删除没有子集合的文档



我有一个名为"部门";内部有一个子集合名为";用户";。我想删除"中的所有文档;部门";没有用户子集合中的文档或者没有子集合用户。

关于如何找到要删除的文档,有什么想法吗?

谢谢!

假设您有一个如下所示的结构:

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);
}
});
});

相关内容

  • 没有找到相关文章

最新更新