pythonfirebasegoogle-cloud-firestoregoogle-cloud-functions

Defining a Firestore query by comparing two document's fields values


I'm having my first steps with Cloud Firestore, and I am stuck on this one. I'm looking for a where query to return me values that are >= the limit.

  [{
    'limit': 100,
    'value': 200 
  }, 
  {
    'limit': 50,
    'value: 50,
  },
  {
    'limit': 95,
    'value': 90, 
  }]

I am using the Firebase Admin Python SDK in a Cloud Function.

Any hints?


Solution

  • As Alex has explained, there is no way to compare two document's fields values when executing a query with Firestore.

    One possible approach, would be to save the result of the inequality when you save the document to the database. If, when you save a "check" document you know the two values (limit and value), you could add a third field named, for instance,valueAboveLimit with a value of True or False, that you calculate when you save the "check" document (i.e. from your front-end with the corresponding client SDK or from a server with the Firebase Admin Python SDK, depending on how you write the Firestore documents).

    Then your query will be easy:

    database = firestore.client()
    col_checks = database.collection('checks')
    query_checks = col_checks.where('valueAboveLimit', '==', True)
    results = query_checks.get()
    

    In case you don't have the values of limit and value at the time you save the Firestore document (for example the limit field is written later), you could use a Cloud Function that is triggered when the Firestore document is changed and, if the two fields are present, calculates and saves this valueAboveLimit field.