Разве мы не можем запрашивать коллекции внутри транзакций? - PullRequest
0 голосов
/ 28 апреля 2018

Глядя на https://firebase.google.com/docs/reference/js/firebase.firestore.Transaction Я вижу четыре метода: удалить, установить, получить, обновить.

Я собирался создать прекрасный маленький запрос коллекции и передать его в .get, но я вижу, что документы говорят, что .get "Читает документ, на который ссылается предоставленная DocumentReference ."

Похоже, это означает, что мы не можем получить коллекцию или запросить коллекцию с объектом транзакции.

Я мог бы запросить тех, кто использует метод запроса .get () вместо метода транзакции .get (), но если коллекция изменится из-под меня, транзакция окажется в несогласованном состоянии без повторных попыток.

Кажется, я бью стену здесь. Правильно ли мое понимание? Разве мы не можем получить доступ к коллекциям внутри транзакции согласованным образом?

Ответы [ 3 ]

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

Я не понимаю. этот код в порядке или нет? Я не вижу другого способа сделать это:

admin.firestore().runTransaction(async t => {
const query = admin
    .firestore()
    .collection('coll')
    .where('x', '==', true);
    const results = await query.get(); //this line is crucial
results.forEach(r => t.update(r, ...)});

? Говорят, что когда кто-то пишет в коллекцию, транзакция запускается снова

0 голосов
/ 05 декабря 2018

То, что я сделал, было (с to, являющимся await-to-js):

const [getInvestmentError, getInvestmentSuccess] = await to(db.collection('investments')
  .where('userId', '==', uid)
  .where('assetId', '==', assetId)
  .get()
);

А потом:

const [readInvestmentError, readInvestment] = await to(transaction.get(
  db.collection('investments').doc(getInvestmentSuccess.docs[0].id)
));
0 голосов
/ 28 апреля 2018

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

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