So I have a set of items in Firestore, and I want to change a property in a document when a criteria is met in Firestore.
- Rooms collection
- Room document
- ...properties
- all_answered property
- Users collection
- guid User doc
- answered property
- guid User doc
- answered property
- guid User doc
- Room document
When every user in the users collection has the answered property as true, I want to set the "all_answered" property to true as well in the Room document. These User docs will be on different devices, obviously. How can I do this?
CodePudding user response:
There are a few common approaches here, and some complications. For easier parsing I'll put them in a list.
"All answered" is a dynamic value, i.e. when a new user joins the system the value should become false again. For this reason I recommend keeping a counter for the number of users that have answered, and for the total number of users. If the two values are the same, all people have answered.
With that, you can then update the
answeredCount
property whenever any user updates theiranswered
property value. Doing this in a transaction or batched write to ensure it's atomic.Then when you need to know if all users have answered, you read the user count in your code, and then run a query where you compare
answeredCount
with the value you just read.
An alternative approach, closer to what you suggest already in your question:
- You could also periodically run a query that counts the number of users and the number of users that answered (both with the new COUNT() feature), and sets the flag field based on these counts).