【问题标题】:Update all documents in Firestore更新 Firestore 中的所有文档
【发布时间】:2020-11-03 09:03:06
【问题描述】:

我对我的文档进行了更改,现在一个字符串字段是一个数组,名称也更改了。 所以它来自:

phoneNumber: "+34616161616"

到:

phone: {
    phoneNumber: "616161616",
    phoneCode: "+34",
    isoCode: "ES"
}

在我的应用程序中进行重构后,我还支持旧版本,但我意识到我需要做很多更改。

我可以更新 Firestore 中的所有文档吗? Firebase 内部有什么方法可以立即更新吗?

结构是:

1- 用户(集合)--> userId --> 投资组合(集合)--> PortfolioId --> 租金(收藏) --> collectionId --> 电话

2- 用户(集合)--> userId --> 联系人(集合)--> contactId --> 电话

【问题讨论】:

  • 是的,您当然可以编写代码来更新许多文档。您必须单独查询和更新每个文档。
  • 但我并不是要从我的应用程序中单独执行此操作。有没有办法直接从 Firebase 的一个功能/选项中做到这一点?
  • 另外,如果我有一个免费帐户和数百条记录呢?
  • 如果 Firestore 不能满足您的特定需求,那么还有其他选项可用于构建您的应用程序。每个数据库都有需要管理的优势和局限性。
  • 解决方案与我所说的完全一样——分别查询、迭代和更新。 Firestore 真的没有其他选择。

标签: firebase google-cloud-firestore


【解决方案1】:
functions.firestore.document('/accounts/{accountId}/resources/{resourceId}')

.onUpdate((更改,上下文) => { 常量资源 = context.params.resourceId;

return admin.firestore().collection('/accounts/'+account+'/tasks')
  .where('resourceId', '=', resource).get().then(snapshot => {
    const promises = [];
    snapshot.forEach(doc => {
      promises.push(doc.ref.update({
        fieldA: 'valueA',
        fieldB: 'valueB'
      }));
    });
    return Promise.all(promises)
})
.catch(error => {
  console.log(error);
  return null;
});

}); 这应该可以更新您的文档

【讨论】:

  • 不能直接从 Firebase 执行此操作?我需要从我的应用程序执行此操作吗?另外,当我想更新所有资源时,为什么要传递 resourceId?
  • 该更新也会更新该文档的值,但不会更新参数名称
猜你喜欢
  • 2018-12-31
  • 2020-10-03
  • 2019-07-15
  • 2022-11-25
  • 2023-04-05
  • 2019-02-20
  • 2018-09-21
  • 1970-01-01
  • 2019-06-29
相关资源
最近更新 更多