更新 Cloud Firestore 中的集合名称

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

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

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

请帮忙。

android firebase google-cloud-firestore
4个回答
60
投票

名称、ID、馆藏或文档一旦存在就无法更改。 所有这些数据都是不可变的,以便构建有效的索引。

您当然可以读出所有内容,然后使用新名称和 ID 将其全部放回。


10
投票

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

      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()as Map<String, dynamic>);
        });
      });

注意:上面的代码是为 flutter 编写的,但只需稍加修改就可以帮助任何人。

测试后更新: 这不会移动任何子集合


8
投票

您可以尝试Firefoo它允许您更改重命名、复制、导出等,但它不是免费的enter image description here


2
投票

这是一段用 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').doc(doc.id).set(doc.data()));
    }));
})
Promise.allSettled(arrayPromise)
© www.soinside.com 2019 - 2024. All rights reserved.