Семантика транзакций Firestore с запросами на чтение - PullRequest
0 голосов
/ 28 ноября 2018

В документах указано, что транзакция завершается неудачей, когда:

Транзакция считывает документ, который был изменен вне транзакции.

Мне интересно, относится ли это также к запросам на чтение, которые могут возвращать более одного документа (через .where('x', '==', 'y')).Будет ли транзакция все еще неудачной, если запрос Read вернет больше результатов, если он будет выполнен снова когда-нибудь во время транзакции?

Чтобы проиллюстрировать мой вопрос, допустим, у меня есть коллекция автомобилей со следующей схемой:

{ 
   ownerId: string, 
   make: string,
   horsepower: int
   ...
}

Теперь я опрашиваю машины определенного владельца в transaction.get() звонке:

transaction.get(firestore.collection('cars').where('ownerId', '==', '123'))...

Допустим, я получаю Snapshot с 2 машинами, основываясь на этих автомобилях.Я хочу сделать немного магии в сделке.Во время транзакции для этого владельца добавляется для этого владельца (поэтому он не является частью первоначального снимка).В этом случае произойдет ли транзакция?

PS: я не ищу другого решения, приведенный выше пример вымышлен, я просто хочу понять, как транзакция ведет себя в этом случае.

1 Ответ

0 голосов
/ 28 ноября 2018

Допустим, я получил Снимок с 2 Автомобилями, основываясь на этих автомобилях, я хочу сделать магию в сделке.Во время транзакции для этого владельца добавляется еще один автомобиль (поэтому он не является частью первоначального снимка).Будет ли транзакция неудачной в этом случае?

Определенно нет.Поскольку новая добавленная машина не является частью первоначальной транзакции, она не подведет.Добавленная машина - это новый добавленный объект, а не измененный объект.

В документах упоминается, что:

Транзакция прочитала документ, который был изменен снаружи.транзакции.

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

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