Android 更新云Firestore中的集合名称

Android 更新云Firestore中的集合名称,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我们可以在Cloud Firestore中更改集合的名称吗?我创建了一个包含200个文档的集合。现在我想更改集合的名称。在Firebase控制台中,我找不到执行此操作的方法 是否可以通过代码或在控制台中更改集合的名称。或者是否可以从Firestore导出文档,创建新集合,然后再次导入这些文档 请提供帮助。一旦名称、ID、集合或文档存在,就无法更改它们。为了构建高效的索引,所有这些数据都是不可变的 您当然可以读出所有内容,然后用新名称和ID将其全部放回。您可以加载它,然后用新名称重新加载它

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

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


请提供帮助。

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


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

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

      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());
        });
      });

注意:上面的代码是为flatter编写的,但它可能对任何人都有帮助,只需稍作修改。

下面是一段用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)

Firebase实时数据库中有导出/导入选项,但Firestore没有。如果我在什么地方漏掉了,请纠正我。Firestore中是否还有其他导出文档的选项?@DougStevenson,据我所知,只能导入特定集合,而不能导入文档,因此保留集合名称。是否可以将集合下的所有文档导入Firestore Db中具有不同集合名称的另一个集合?@Sri您可以使用将完整Firestore数据库导出/导入到GCP bucket中,然后手动(或通过脚本)更新导出并在更新后导入。不要将更改的ID与更改的集合名称放在同一个存储桶中。更改集合名称应该与索引无关。但这不会移动任何子集合,对吗?只是为处于这种情况的人做标记。还没有用子集合的存在来测试它,但我认为它会起作用,因为子集合被认为是在“element.data()”中提到的数据中,对吗?那它为什么不被移动呢?如果有人能测试一下,我会很高兴的。