Eduardo Yamauchi
Eduardo Yamauchi

Reputation: 849

Do I pay one read when I start listening to a single document in Firestore, even if the doc has not changed?

I know that whenever I turn on a listener to a QUERY, the minimum charge is one read, even if this query returns no documents (because there are no documents that fit the query, or even if there are but there were no changes since last time this listener was on).

According to documentation:

Minimum charge for queries There is a minimum charge of one document read for each query that you perform, even if the query returns no results.

Stream<QuerySnapshot> stream = Firestore().collection("someCollection").where("someField", isGreaterThan: 42).snapshots();
stream.listen((querySnapshot) => doSomething());

Also, I know that I'm not charged if I use a simple get to read some document, as long as this document already exists in the offline cache, and was not changed in Firestore (According to Doug Stevenson).

 DocumentSnapshot doc = await Firestore().collection("someCollection").document("documentID").get();

My question is:

Suppose a document already exists in my offline cache, and was not changed in Firestore since.

If instead of a get I turn on a listener to this single document (DocumentSnapshot, NOT a QuerySnapshot), like this:

Stream<DocumentSnapshot> stream = Firestore().collection("someCollection").document("documentID").snapshots();
stream.listen((documentSnapshot) => doSomething());

Will I be charged for one read when this listener is turned on?

Upvotes: 3

Views: 510

Answers (1)

Alex Mamo
Alex Mamo

Reputation: 138824

Will I be charged for one read when this listener is turned on?

No. If you turn on a listener that is listening to a single document, you are not charged at all since the document already exists in the cache. Remember, you are charged with one document read when a query does not return any results but in your case, you aren't performing any query, you are just listening to a document change. It makes no sense to be charged with one document read each time you start listening for changes or each time you open the application. That's the beauty of Firestore, you have a local copy of your database so you cannot be charged for cached documents, unless the documents are changed in the back-end.

Upvotes: 3

Related Questions