首页 > 解决方案 > 删除与我在另一个集合中删除的文档相关联的所有字段

问题描述

对于我在我的应用程序上使用 firebase/nodeJS 的上下文。

我正在删除一个名为 workers 的集合的用户。为此,我更新了工作文档上的字段 deleted : true 。我不会删除文档,因为如果需要,我想保留他们的信息。但是当我删除一个工作人员时,我必须将他从所有正在处理的属性中删除(它们有一个名为 workers 的字段,它是所有相关工作人员的数组。)

因此,我必须浏览相关集合的所有属性,检查工作人员是否在其上并将其删除。

有没有办法这样做?我看到了这个页面:https ://firebase.google.com/docs/firestore/manage-data/add-data#node.js_11 但不知道如何使用这些资源来做到这一点。

标签: javascriptnode.jsfirebasegoogle-cloud-firestore

解决方案


所以最后我一个人做了。首先,我必须获取工作正在进行的所有属性,为此我使用了数组包含。

let docsProperties = await db.collection('user').doc(id).collection("properties")
            .where("workers", "array-contains", workerId).get();

然后我想浏览所有这些属性并删除工人。考虑先做一个 ForEach 。但问题是我想使用带有arrayRemove 的await .update() 并且异步方法在ForEach 中不可用。所以我使用了承诺。

            let promises = [];

        docsProperties.forEach(doc => {
            promises.push(doc.ref.update({
                workers: admin.firestore.FieldValue.arrayRemove(workerId)
            })); });
        return Promise.all(promises);

arrayRemove 是 firebase 文档中的一种方法,用于删除以下数组字段中元素的所有出现。所以我浏览了所有属性,添加了所有承诺并执行了它们!

工作完美,如果有人有问题,请不要犹豫。


推荐阅读