Простые способы добавления документов в подколлекцию в Firestore с помощью Flutter

Firestore – популярная база данных NoSQL, предоставляемая Firebase, а Flutter – мощный набор инструментов пользовательского интерфейса для создания кроссплатформенных приложений. В этой статье мы рассмотрим различные способы добавления документов в подколлекцию в Firestore с помощью Flutter. Независимо от того, новичок вы или опытный разработчик, эти простые в использовании примеры кода помогут вам лучше понять процесс.

Метод 1: использование классов CollectionReferenceи DocumentReference.
Чтобы добавить документ в подколлекцию, нам нужно сначала получить ссылку на родительский документ, а затем используйте эту ссылку для доступа к подколлекции. Вот как этого можно добиться:

CollectionReference parentCollection = FirebaseFirestore.instance.collection('parentCollection');
DocumentReference parentDocument = parentCollection.doc('parentDocument');
CollectionReference subcollection = parentDocument.collection('subcollection');
subcollection.add({
  'field1': 'value1',
  'field2': 'value2',
});

В этом методе мы создаем ссылку на родительскую коллекцию, затем ссылку на родительский документ и, наконец, получаем доступ к подколлекции. Затем мы можем использовать метод add(), чтобы добавить новый документ в подколлекцию.

Метод 2: использование класса FieldValue
Другой способ добавить документ в подколекцию — использовать класс FieldValue, предоставленный Firestore. Этот метод полезен, если вы хотите установить поле со значением, которое зависит от текущей метки времени сервера или значения поля из другого документа. Вот пример:

CollectionReference parentCollection = FirebaseFirestore.instance.collection('parentCollection');
DocumentReference parentDocument = parentCollection.doc('parentDocument');
CollectionReference subcollection = parentDocument.collection('subcollection');
subcollection.add({
  'field1': 'value1',
  'field2': FieldValue.serverTimestamp(),
});

В этом примере мы устанавливаем значение «field2» в качестве временной метки сервера, используя FieldValue.serverTimestamp(). Это гарантирует, что поле будет заполнено текущим временем сервера при добавлении документа во вложенную коллекцию.

Метод 3: использование транзакции
Транзакции в Firestore позволяют выполнять несколько операций атомарно. Это может быть полезно, если вы хотите обеспечить согласованность данных. Вот пример использования транзакции для добавления документа в подколлекцию:

CollectionReference parentCollection = FirebaseFirestore.instance.collection('parentCollection');
DocumentReference parentDocument = parentCollection.doc('parentDocument');
CollectionReference subcollection = parentDocument.collection('subcollection');
FirebaseFirestore.instance.runTransaction((transaction) async {
  DocumentSnapshot parentSnapshot = await transaction.get(parentDocument);
  if (parentSnapshot.exists) {
    // Create a new document in the subcollection
    await transaction.set(subcollection.doc(), {
      'field1': 'value1',
      'field2': 'value2',
    });
  }
});

В этом методе мы используем метод runTransactionдля выполнения транзакции. Внутри транзакции мы сначала извлекаем родительский документ и, если он существует, создаем новый документ в подколлекции с помощью метода set().

В этой статье мы рассмотрели различные способы добавления документов в подколлекцию Firestore с помощью Flutter. Мы рассмотрели использование классов CollectionReferenceи DocumentReference, класса FieldValueи выполнение транзакций. Эти методы дают вам гибкость в управлении вашими данными и обеспечивают плавную интеграцию между Firestore и вашим приложением Flutter.