18

i'm using Firestore as my database in a project and i have a table that i need to do a query inside an object

{
   foo: "data",
   bar: "data",
   exObject: {
      dataToQuery: "value"
   }
}

here is an example of a structure where i want to do a query inside the object a query that would look like this:

dbRef.collection("Table").where("exObject.dataToQuery", "==", "value")

but this is not working.

Is there a way to query in Firestore using an object's inner value as parameter? If not, is there a way to achieve something that would give the same result?

Example of a Firestore Structure

enter image description here

dev.doc
  • 569
  • 3
  • 12
  • 18
frankybboy
  • 529
  • 5
  • 12

4 Answers4

30
dbRef.collection("Table").where("exObject.dataToQuery", "==", "value")

this syntax i first posted is indeed the good syntax and started working eventually. I'd class the reason of my problem as a typo that i must have corrected trying a lot of different things

frankybboy
  • 529
  • 5
  • 12
  • I realize this is a year old, but I'm working with the same .where method on firestore. I just don't know how to access the data returned. the Object returned shows the right id under the QuerySnapshot, but I don't see the actual object itself. How did you access the object it returns? – continuousqa Oct 15 '18 at 19:08
  • `let theResults = dbRef.collection("Table").where("exObject.dataToQuery", "==", "value")` – Rory Aug 09 '19 at 13:11
6

Here is the answer :

.where(new firestore.FieldPath('exObject' , 'dataToQuery'), '==', "value"))

More info Here

BorisD
  • 1,611
  • 17
  • 22
0

Try ( change from 'Table' to 'TEST' )

xptoCollection : AngularFirestoreCollection<any>;

  constructor(private afs: AngularFirestore) { }

      this.xptoCollection = this.afs.collection('TEST', ref => {
        return ref.where('exObject.{dataToQuery}', '==', 'value');
      });
-5

for some reason to work , u need to leave space between object_name and .property_name

'exObject .dataToQuery'

instead of

 'exObject.dataToQuery'

leave space and it worked for me