在 Cloud Firestore 中更新集合名称

Posted

技术标签:

【中文标题】在 Cloud Firestore 中更新集合名称【英文标题】:Updating a collection name in Cloud Firestore 【发布时间】:2019-02-14 12:52:00 【问题描述】:

我们可以更改 Cloud Firestore 中集合的名称吗?我创建了一个包含 200 个文档的集合。现在我想更改集合的名称。在 Firebase 控制台中,我找不到执行此操作的方法。

是否可以通过代码或在控制台中更改集合的名称。或者是否可以从 Firestore 导出文档,创建一个新集合,然后再次导入这些文档?

请帮忙。

【问题讨论】:

【参考方案1】:

名称或 ID 或集合或文档一旦存在便无法更改。为了构建有效的索引,所有这些数据都是不可变的。

您当然可以把所有内容都读出来,然后用新的名称和 ID 重新输入。

【讨论】:

Firebase 实时数据库中有导出/导入选项,但 Firestore 没有。请纠正我,以防我在某处错过了它。在 Firestore 中导出文档还有其他选项吗? @DougStevenson,据我了解,只能导入特定的集合,而不是文档,从而保留集合名称。是否可以将一个集合下的所有文档导入到 Firestore Db 中具有不同集合名称的另一个集合中? @Sri 您可以使用Firebase import / export 将完整的 Firestore 数据库导出/导入到 GCP 存储桶中,然后手动(或通过脚本)更新导出并在更新后重新导入。 不要将更改的 ID 与更改的集合名称放在同一个存储桶中。更改集合名称应该与索引无关。【参考方案2】:

您可以加载它,然后用新名称重新上传它

      await FirebaseFirestore.instance
          .collection(oldCollectionName)
          .get()
          .then((QuerySnapshot snapShot) async 
        snapShot.docs.forEach((element) async 
          await FirebaseFirestore.instance
              .collection(newCollectionName)
              .doc(element.id)
              .set(element.data());
        );
      );

注意:以上代码是为 Flutter 编写的,但它可能对任何人稍加改动有所帮助。

【讨论】:

这不会移动任何子集合,对吧?只是为处于这种情况的人标记。 还没有测试它是否存在子集合,但我认为它会起作用,因为子集合被认为是在“element.data()”中提到的数据中,对吧?那为什么不移动呢?如果有人可以测试它,我会很高兴。 我试过了,但它一直显示这个错误“参数类型'对象?'当我要对其进行 SET 时,无法将其分配给参数类型“Map【参考方案3】:

你可以试试Firefoo它允许你更改重命名、复制、导出等,但它不是免费的

【讨论】:

【参考方案4】:

这是一段用 javascript 编写的代码。 请注意子集合不会被移动,并且之前的集合不会被销毁。

const db = admin.firestore();
const oldCollRef = db.collection('oldCollectionName');
const oldCollSnap = await oldCollRef.get();
let arrayPromise = [];
oldCollSnap.forEach(async doc => 
    arrayPromise.push(new Promise(async (resolve, reject) => 
        resolve(await db.collection('newCollectionName').add(doc.data()));
    ));
)
Promise.all(arrayPromise)

【讨论】:

我使用@JeremyValensi 的上述解决方案为每个文档调用Andrey Lechev's solution 以获取子集合。非常感谢你们!

以上是关于在 Cloud Firestore 中更新集合名称的主要内容,如果未能解决你的问题,请参考以下文章

如何按创建日期而不是名称对 Cloud Firestore 集合中的文档进行排序?

Cloud Firestore 查询文档及其集合

如何为 Firestore 数据库的 Cloud Functions 中的每个集合插入、更新添加时间戳

Firestore / Cloud功能 - 如何在更改时更新Firestore数据

如何从 Javascript 在 Cloud Firestore 中创建集合?

Python Google Cloud Firestore 错误 504 Deadline Exceeded