当新功能需要添加/不同数据时,更新 Firestore 中现有用户数据的流程是什么?

问题描述 投票:0回答:1

我发现其他几篇帖子提出了类似的问题,但它们都有特定的代码元素,并且这个问题更多地涉及 Firebase 和 NOSQL 数据库的流程或最佳实践。一旦我知道我应该采取什么方向,我就能弄清楚代码。

背景

我有一个使用 React 和 Firestore 数据库的简单应用程序。它已部署,目前有 1 个用户……我。但为了这个问题,让我们假设我有 1000 个用户。每个用户都可以创建任意数量的“项目”或“视图”,并在“用户”文档中存储一些数据。

我已经为我的应用程序创建了一个新功能,需要:

  1. 用户文档中出现的新字段
  2. 需要重命名现有字段(为了代码清晰起见重命名)

由于我是唯一的用户,我可以直接删除 Firestore 并重新开始,但我的其他 999 个虚构用户可能会因为他们的数据已被删除而感到有点恼火,所以......

处理这个问题的正确方法是什么?通过阅读各种帖子,似乎有三种方法,但我不确定哪种是最佳实践。

可能的解决方案

  1. 使用云函数运行某种脚本?操作现有数据,以便为新版本做好准备。

这是我的首选解决方案,因为它是一次完成的练习,但我不知道这在 Firestore 中如何工作。我不能 100% 确定 Firebase 和 Google Cloud 之间的关系,也不知道如何实际执行此操作。

  1. 考虑应用程序内数据可能存在的差异,但包括纠正和更新文档的功能。

这看起来很混乱,因为随着应用程序的增长,我再次遇到这个问题,我将永远需要更复杂的代码来处理不同的版本,这会带来更多的错误或其他问题的机会。

  1. 创建我自己的“管理”应用程序并编写将操作数据的函数,因为这无法在 Firebase 控制台中本地完成。 看起来很合理,但我不确定为什么这不能在控制台中完成。这是我最好的路线吗?

或者还有其他我完全错过的事情吗?

请发送帮助。

firebase google-cloud-firestore
1个回答
0
投票

数据混乱——由于它的 NoSQL 性质,这可能会成为 FB 中的一个问题。您可以利用 FB 规则来确保您的数据始终以您期望的正确格式写入。 (尽管我们欢迎原生模式支持)

当您想要进行更改时:

  1. 正如您所描述的,我们运行称为“迁移”的脚本。它将数据转换为正确的格式。这不需要通过 Cloud Function 运行。它可以是带有节点的简单脚本。理想情况下,您可以将其集成到 CI/CD 管道中。
import admin from "firebase-admin";

// TODO in project settings > Service accounts > Generate new private key
import serviceAccount from "./path/to/serviceAccountKey.json";

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  // TODO change to your DB url
  databaseURL: "https://xxxx.firebaseio.com",
});

const migrate = async () => {
  const docs = await admin.firestore().collection("workspaces").listDocuments();
  console.log("Going to process number of WS:", docs.length);
  ...
  console.log("Successfully processed number of users:", counter);
  }
};

migrate().then(() => console.log("Migration done"));
  1. 我建议在不同状态的应用程序中进行计数。我们有时会这样做,但我们会尽力避免它,并通过规则、迁移和打字稿确保正确的状态。

  2. Firebase 控制台不是操作数据的基本方式。我们一直在使用这两个工具:

© www.soinside.com 2019 - 2024. All rights reserved.