Следуйте за этим ответ Я пытаюсь реализовать использование транзакции для отслеживания всей коллекции Firestore для добавления нового документа.По сути, я хочу написать новый документ для подколлекции, только если есть только один документ.Мне нужно использовать транзакцию, чтобы избежать состояния гонки, в результате чего> 2 документа в подколлекции.Максимальное значение должно быть 2.
Как использовать транзакцию для отслеживания документа, добавленного в подколлекцию?
Я пытаюсь сделать это долго, но не могу решить.
Я использую эксперимент, повторитьчерез вложенную коллекцию для документа, но не знаю, как сделать это через транзакцию.
Мой код до сих пор (возможно, неправильный метод):
Firestore.instance.runTransaction((transaction) async {
final CollectionReference collectionRef = ref
.document(‘document’).collection(‘subCollection’);
List<DocumentSnapshot> subCollectionDocsSnapshot = [];
await collectionRef.getDocuments().then((querySnapshot) =>
querySnapshot.documents.forEach((document) {
subCollectionDocsSnapshot.add(document);
}
));
final DocumentReference newDocRef = collectionRef.document(docName);
await transaction.set(
newDocRef,
{‘docName’: docName,
}
);
});
Как решить?
Спасибо!
ОБНОВЛЕНИЕ:
Я пытаюсь добавить также transaction.get()
, чтобы перебрать документы подколлекции, но это не влияет на состояние гонки:
subCollectionDocsSnapshot.forEach((document) {
transaction.get(document.reference);
});