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.