【问题标题】:Remove all fields associated linked to a document that I removed on another collection删除与我在另一个集合中删除的文档相关联的所有字段
【发布时间】:2021-11-27 11:34:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • 听起来您想运行查询以查找集合中所有对您要删除的文档有引用的文档。 Renaud 在这里展示了如何做到这一点的示例:stackoverflow.com/a/53141199
  • 我成功了,今天晚些时候我会回答我自己的问题!

标签: javascript node.js firebase google-cloud-firestore


【解决方案1】:

所以我终于独自完成了。 首先,我必须获取工作正在进行的所有属性,为此我使用了数组包含。

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

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

            let promises = [];

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

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

完美运行,如果有人有问题,请不要犹豫。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 2017-04-11
    • 2018-11-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多