Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can we not query collections inside transactions?

Looking at https://firebase.google.com/docs/reference/js/firebase.firestore.Transaction I see four methods: delete, set, get, update.

I was about to construct a lovely little collection query and pass it to .get, but I see the docs say that .get "Reads the document referenced by the provided DocumentReference."

It appears this means we cannot get a collection, or query a collection, with a Transaction object.

I could query those with the query's .get() method instead of the transaction's .get() method, but if the collection changes out from under me, the transaction will end up in an inconsistent state without retrying.

It seems I am hitting a wall here. Is my understanding correct? Can we not access collections inside a transaction in a consistent way?

like image 967
Verdagon Avatar asked Apr 28 '18 00:04

Verdagon


People also ask

How do I get specific data from firestore?

There are three ways to retrieve data stored in Cloud Firestore. Any of these methods can be used with documents, collections of documents, or the results of queries: Call a method to get the data once. Set a listener to receive data-change events.

What is a collection in firebase?

A collection contains documents and nothing else. It can't directly contain raw fields with values, and it can't contain other collections. (See Hierarchical Data for an explanation of how to structure more complex data in Cloud Firestore.) The names of documents within a collection are unique.

How can I track collections for one or more transactions?

The upper section of the page shows cases for the selected customer, the middle section shows transactions for the customer, and the lower section shows activities for the customer. You can create collections cases to track collections information for one or more transactions and activities.

What is the use of transactions in SQL?

Transactions are usually used when you have CREATE, UPDATE or DELETE statements and you want to have the atomic behavior, that is, Either commit everything or commit nothing. Make sure nobody else could update the table of interest while the bunch of your select query is executing.

Should I use a transaction for read select statements?

However, you could use a transaction for READ select statements to: Make sure nobody else could update the table of interest while the bunch of your select query is executing. Have a look at this msdn post.

What is the difference between collections list and collections agent records?

By default, users can view all customer information on the collections list pages. Collections agent records let you determine the customer pools that can be used to filter information on the collections list pages and the Collections page. Collections agents work with customers to make sure that payments are collected in a timely manner.


1 Answers

Your understanding is correct. When using the web and mobile SDKs, you have to identify the individual documents that you would like to ensure will not change before your transaction is complete. If those documents come from a collection query ahead of time, fine. But think for a moment about how not-scalable it would be if you had to track every document in a (very large) collection in order to complete your transaction.

However, for backend SDKs, you can perform a query inside a transacction and effectively transact on all the documents that were returned by the query, up to the limit of number of documents in a transaction (500).

like image 173
Doug Stevenson Avatar answered Nov 12 '22 02:11

Doug Stevenson