javascript - 删除与我在另一个集合中删除的文档相关联的所有字段
问题描述
对于我在我的应用程序上使用 firebase/nodeJS 的上下文。
我正在删除一个名为 workers 的集合的用户。为此,我更新了工作文档上的字段 deleted : true 。我不会删除文档,因为如果需要,我想保留他们的信息。但是当我删除一个工作人员时,我必须将他从所有正在处理的属性中删除(它们有一个名为 workers 的字段,它是所有相关工作人员的数组。)
因此,我必须浏览相关集合的所有属性,检查工作人员是否在其上并将其删除。
有没有办法这样做?我看到了这个页面:https ://firebase.google.com/docs/firestore/manage-data/add-data#node.js_11 但不知道如何使用这些资源来做到这一点。
解决方案
所以最后我一个人做了。首先,我必须获取工作正在进行的所有属性,为此我使用了数组包含。
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 文档中的一种方法,用于删除以下数组字段中元素的所有出现。所以我浏览了所有属性,添加了所有承诺并执行了它们!
工作完美,如果有人有问题,请不要犹豫。
推荐阅读
- apache-zookeeper - 使用 zookeeper 发现指定 apache ignite 节点的公共地址
- python - 如何删除 telnet 输出中多余的字母和数字?
- django - 如何通过表单在 django 模型中添加选择字段?
- python - 从时间序列 xarray 数据集中排除一天数据
- spring-boot - Hibernate Envers:Autowired AuditReader 共享一级缓存
- html - page-break-after:总是不能正常工作
- c# - 如何在 ASP.NET 中访问响应正文
- android - 无法使用热点连接到我的网络服务
- sql - hibernate 错误地将查询转换为 jsonb 字段
- haskell - 什么语言有等式重写?