Обновление названия коллекции в cloud firestore

Можно ли изменить название коллекции в Cloud Firestore? Я создал коллекцию из 200 документов. Теперь я хочу изменить название коллекции. В консоли Firebase я не мог найти способ сделать это.

Можно ли изменить название коллекции с помощью кода или в консоли. Или можно ли экспортировать документы из Firestore, создать новую коллекцию, а затем снова импортировать эти документы?

Пожалуйста помоги.

30
0
13 632
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Невозможно изменить имена, идентификаторы, коллекции или документы, когда они существуют. Все эти данные неизменяемы для построения эффективных индексов.

Вы, конечно, можете прочитать все, а затем вернуть все обратно с новыми именами и идентификаторами.

Существует возможность экспорта / импорта в базе данных реального времени Firebase, но не для Firestore. Пожалуйста, поправьте меня, если я что-то пропустил. Есть ли другой вариант экспорта документов в Firestore?

Sri 10.09.2018 08:07

@DougStevenson, насколько я понимаю, можно импортировать только определенную коллекцию, а не документы, таким образом сохраняя имя коллекции. Можно ли импортировать все документы в коллекции в другую коллекцию в Firestore Db с другим именем коллекции?

Adam Hurwitz 13.11.2018 18:37

@Sri вы можете экспортировать / импортировать полную базу данных Firestore в корзину GCP с помощью Импорт / экспорт Firebase, а затем обновить экспорт вручную (или с помощью скрипта) и импортировать обратно как обновленные.

Array 02.02.2020 22:34

Не помещайте изменяющиеся идентификаторы в одну корзину с изменяющимися именами коллекций. Изменение имени коллекции не должно иметь ничего общего с индексацией.

dtheodor 29.10.2020 16:24

Вы можете загрузить его, а затем повторно загрузить с новым именем

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

Примечание: приведенный выше код написан для флаттера, но он может помочь кому угодно с небольшими изменениями.

Однако это не переместится ни в какие подколлекции, верно? Просто помечаю людей в такой ситуации.

Sam Pierce Lolla 21.02.2021 01:32

Не тестировал его на наличие подколлекции, но я думаю, что он будет работать, так как подколлекция считается находящейся в пределах данных, упомянутых в 'element.data ()', верно? так почему бы его не переместить? если кто-то сможет это протестировать, я буду рад.

Shalabyer 21.02.2021 17:34

Вот фрагмент кода, написанный на 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, указанное выше, чтобы вызвать Решение Андрея Лечева для каждого документа, чтобы получить подколлекции. Спасибо вам обоим!

skillit zimberg 19.07.2021 19:03

Другие вопросы по теме