Как отслеживать всю коллекцию с помощью транзакции? - PullRequest
0 голосов
/ 25 февраля 2019

Следуйте за этим ответ Я пытаюсь реализовать использование транзакции для отслеживания всей коллекции 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);
                  });

1 Ответ

0 голосов
/ 25 февраля 2019

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

Вместо этого рассмотрите возможность иметь другой документ в другой коллекции, который подсчитывает количество документов в коллекции, и использовать его в своей транзакции.Или, по крайней мере, документ, который записывает логическое значение, указывающее, имеет ли коллекция> 2 документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...