Marko
Marko

Reputation: 545

firebase where() not returning that docs data?

Here's what I'm trying to do, I'm trying to get the username of a user. I have the users email so I'm trying to search documents to find the document where that is the email, then get the username from that.

Code:

useEffect(() => {
        auth().onAuthStateChanged((user) => {
            if (user) {
                // User logged in already or has just logged in.
                updateUser(user.email)
            } else {
                // User not logged in or has just logged out.
            }
        });

        //get the username here
        firestore().collection('users').where("email", "==", userCurrent).get().then((doc) => {
            console.log(doc)
        }).catch((error) => { console.log(error) })
    })

when I try and do doc.data(), i get doc.data is not a function. When I try and remove that and just call doc to see what is printed out, I get this massive data dump:

vc {
  "Bf": Ht {
    "Qt": $t {
      "data": Nt {
        "i": [Function i],
        "root": _class {
          "size": 0,
        },
      },
      "i": [Function i],
    },
    "Ut": Gt {
      "Mt": Nt {
        "i": [Function i],
        "root": _class {
          "size": 0,
        },
      },
      "Ot": Nt {
        "i": [Function anonymous],
        "root": _class {
          "size": 0,
        },
      },
      "i": [Function anonymous],
    },
    "Wt": true,
    "docChanges": Array [],
    "docs": Gt {
      "Mt": Nt {
        "i": [Function i],
        "root": _class {
          "size": 0,
        },
      },
      "Ot": Nt {
        "i": [Function anonymous],
        "root": _class {
          "size": 0,
        },
      },
      "i": [Function anonymous],
    },
    "fromCache": false,
    "jt": false,
    "query": zn {
      "an": Array [
        ps {
          "dir": "asc",
          "field": $ {
            "offset": 0,
            "segments": Array [
              "__name__",
            ],
            "t": 1,
          },
        },
      ],
      "cn": At {
        "Z": "users|f:email==|ob:__name__asc",
        "collectionGroup": null,
        "endAt": null,
        "filters": Array [
          _s {
            "field": $ {
              "offset": 0,
              "segments": Array [
                "email",
              ],
              "t": 1,
            },
            "op": "==",
            "value": Object {
              "stringValue": "",
            },
          },
        ],
        "limit": null,
        "orderBy": Array [
          ps {
            "dir": "asc",
            "field": $ {
              "offset": 0,
              "segments": Array [
                "__name__",
              ],
              "t": 1,
            },
          },
        ],
        "path": F {
          "offset": 0,
          "segments": Array [
            "users",
          ],
          "t": 1,
        },
        "startAt": null,
      },
      "collectionGroup": null,
      "endAt": null,
      "filters": Array [
        _s {
          "field": $ {
            "offset": 0,
            "segments": Array [
              "email",
            ],
            "t": 1,
          },
          "op": "==",
          "value": Object {
            "stringValue": "",
          },
        },
      ],
      "limit": null,
      "on": "F",
      "path": F {
        "offset": 0,
        "segments": Array [
          "users",
        ],
        "t": 1,
      },
      "rn": Array [],
      "startAt": null,
    },
  },
  "Lf": zn {
    "an": Array [
      ps {
        "dir": "asc",
        "field": $ {
          "offset": 0,
          "segments": Array [
            "__name__",
          ],
          "t": 1,
        },
      },
    ],
    "cn": At {
      "Z": "users|f:email==|ob:__name__asc",
      "collectionGroup": null,
      "endAt": null,
      "filters": Array [
        _s {
          "field": $ {
            "offset": 0,
            "segments": Array [
              "email",
            ],
            "t": 1,
          },
          "op": "==",
          "value": Object {
            "stringValue": "",
          },
        },
      ],
      "limit": null,
      "orderBy": Array [
        ps {
          "dir": "asc",
          "field": $ {
            "offset": 0,
            "segments": Array [
              "__name__",
            ],
            "t": 1,
          },
        },
      ],
      "path": F {
        "offset": 0,
        "segments": Array [
          "users",
        ],
        "t": 1,
      },
      "startAt": null,
    },
    "collectionGroup": null,
    "endAt": null,
    "filters": Array [
      _s {
        "field": $ {
          "offset": 0,
          "segments": Array [
            "email",
          ],
          "t": 1,
        },
        "op": "==",
        "value": Object {
          "stringValue": "",
        },
      },
    ],
    "limit": null,
    "on": "F",
    "path": F {
      "offset": 0,
      "segments": Array [
        "users",
      ],
      "t": 1,
    },
    "rn": Array [],
    "startAt": null,
  },
  "T_": null,
  "Uf": null,
  "metadata": Ec {
    "fromCache": false,
    "hasPendingWrites": false,
  },
  "qf": null,
  "vf": dc {
    "Af": za {
      "U": ft {
        "database": "(default)",
        "projectId": "goalsdev-7eb67",
      },
      "ignoreUndefinedProperties": false,
      "serializer": pe {
        "U": ft {
          "database": "(default)",
          "projectId": "goalsdev-7eb67",
        },
        "Ue": true,
      },
    },
    "Ef": fc {
      "cacheSizeBytes": 41943040,
      "credentials": undefined,
      "experimentalForceLongPolling": false,
      "host": "firestore.googleapis.com",
      "ignoreUndefinedProperties": false,
      "ssl": true,
      "timestampsInSnapshots": true,
    },
    "INTERNAL": Object {
      "delete": [Function _delete],
    },
    "Tf": Wr {
      "Hc": [Function anonymous],
      "Zc": [Function anonymous],
      "auth": Object {
        "addAuthTokenListener": [Function bound ],
        "getToken": [Function bound ],
        "getUid": [Function bound ],
        "removeAuthTokenListener": [Function bound ],
      },
      "currentUser": ti {
        "uid": "BDErkp3H7hbzyce1AVqiS0M6ObT2",
      },
      "eu": 4,
      "forceRefresh": false,
      "tu": true,
    },
    "_f": Ws {
      "As": null,
      "Es": false,
      "Is": Array [],
      "Ps": Array [],
      "Rs": true,
      "Ts": Array [],
      "gs": Ds {
        "En": null,
        "In": 1604894779861,
        "Tn": 0,
        "_n": [Circular],
        "dn": 1000,
        "fn": "async_queue_retry",
        "mn": 60000,
        "wn": 1.5,
      },
      "ws": Promise {
        "_40": 0,
        "_55": Promise {
          "_40": 0,
          "_55": null,
          "_65": 0,
          "_72": null,
        },
        "_65": 3,
        "_72": null,
      },
      "ys": [Function anonymous],
    },
    "df": uc {
      "Dh": Xr {
        "Hu": Yr {
          "au": Ia {
            "Cl": "https://firestore.googleapis.com",
            "Dl": _t {
              "U": ft {
                "database": "(default)",
                "projectId": "goalsdev-7eb67",
              },
              "forceLongPolling": false,
              "host": "firestore.googleapis.com",
              "persistenceKey": "[DEFAULT]",
              "ssl": true,
            },
            "Nl": "projects/goalsdev-7eb67/databases/(default)/documents",
            "U": ft {
              "database": "(default)",
              "projectId": "goalsdev-7eb67",
            },
            "forceLongPolling": false,
          },
          "credentials": Wr {
            "Hc": [Function anonymous],
            "Zc": [Function anonymous],
            "auth": Object {
              "addAuthTokenListener": [Function bound ],
              "getToken": [Function bound ],
              "getUid": [Function bound ],
              "removeAuthTokenListener": [Function bound ],
            },
            "currentUser": ti {
              "uid": "BDErkp3H7hbzyce1AVqiS0M6ObT2",
            },
            "eu": 4,
            "forceRefresh": false,
            "tu": true,
          },
          "ku": false,
          "serializer": pe {
            "U": ft {
              "database": "(default)",
              "projectId": "goalsdev-7eb67",
            },
            "Ue": true,
          },
        },
        "Ju": Array [],
        "Xu": Map {
          38 => pt {
            "et": mt {
              "timestamp": Object {
                "nanoseconds": 178070000,
                "seconds": 1604896308,
              },
            },
            "lastLimboFreeSnapshotVersion": mt {
              "timestamp": Object {
                "nanoseconds": 0,
                "seconds": 0,
              },
            },
            "resumeToken": ct {
              "M": "
       –ÙæÒÐôì",
            },
            "sequenceNumber": 109,
            "target": At {
              "Z": "users|f:email==|ob:__name__asc",
              "collectionGroup": null,
              "endAt": null,
              "filters": Array [
                _s {
                  "field": $ {
                    "offset": 0,
                    "segments": Array [
                      "email",
                    ],
                    "t": 1,
                  },
                  "op": "==",
                  "value": Object {
                    "stringValue": "",
                  },
                },
              ],
              "limit": null,
              "orderBy": Array [
                ps {
                  "dir": "asc",
                  "field": $ {
                    "offset": 0,
                    "segments": Array [
                      "__name__",
                    ],
                    "t": 1,
                  },
                },
              ],
              "path": F {
                "offset": 0,
                "segments": Array [
                  "users",
                ],
                "t": 1,
              },
              "startAt": null,
            },
            "targetId": 38,
            "tt": 0,
          },
          40 => pt {
            "et": mt {
              "timestamp": Object {
                "nanoseconds": 178070000,
                "seconds": 1604896308,
              },
            },
            "lastLimboFreeSnapshotVersion": mt {
              "timestamp": Object {
                "nanoseconds": 0,
                "seconds": 0,
              },
            },
            "resumeToken": ct {
              "M": "
       –ÙæÒÐôì",
            },
            "sequenceNumber": 111,
            "target": At {
              "Z": "users|f:[email protected]|ob:__name__asc",
              "collectionGroup": null,
              "endAt": null,
              "filters": Array [
                _s {
                  "field": $ {
                    "offset": 0,
                    "segments": Array [
             ...(truncated to the first 10000 characters)
vc {
  "Bf": Ht {
    "Qt": $t {
      "data": Nt {
        "i": [Function i],
        "root": _class {
          "size": 0,
        },
      },
      "i": [Function i],
    },
    "Ut": Gt {
      "Mt": Nt {
        "i": [Function i],
        "root": _class {
          "size": 0,
        },
      },
      "Ot": Nt {
        "i": [Function anonymous],
        "root": _class {
          "size": 0,
        },
      },
      "i": [Function anonymous],
    },
    "Wt": true,
    "docChanges": Array [],
    "docs": Gt {
      "Mt": Nt {
        "i": [Function i],
        "root": _class {
          "size": 0,
        },
      },
      "Ot": Nt {
        "i": [Function anonymous],
        "root": _class {
          "size": 0,
        },
      },
      "i": [Function anonymous],
    },
    "fromCache": false,
    "jt": false,
    "query": zn {
      "an": Array [
        ps {
          "dir": "asc",
          "field": $ {
            "offset": 0,
            "segments": Array [
              "__name__",
            ],
            "t": 1,
          },
        },
      ],
      "cn": At {
        "Z": "users|f:[email protected]|ob:__name__asc",
        "collectionGroup": null,
        "endAt": null,
        "filters": Array [
          _s {
            "field": $ {
              "offset": 0,
              "segments": Array [
                "email",
              ],
              "t": 1,
            },
            "op": "==",
            "value": Object {
              "stringValue": "[email protected]",
            },
          },
        ],
        "limit": null,
        "orderBy": Array [
          ps {
            "dir": "asc",
            "field": $ {
              "offset": 0,
              "segments": Array [
                "__name__",
              ],
              "t": 1,
            },
          },
        ],
        "path": F {
          "offset": 0,
          "segments": Array [
            "users",
          ],
          "t": 1,
        },
        "startAt": null,
      },
      "collectionGroup": null,
      "endAt": null,
      "filters": Array [
        _s {
          "field": $ {
            "offset": 0,
            "segments": Array [
              "email",
            ],
            "t": 1,
          },
          "op": "==",
          "value": Object {
            "stringValue": "[email protected]",
          },
        },
      ],
      "limit": null,
      "on": "F",
      "path": F {
        "offset": 0,
        "segments": Array [
          "users",
        ],
        "t": 1,
      },
      "rn": Array [],
      "startAt": null,
    },
  },
  "Lf": zn {
    "an": Array [
      ps {
        "dir": "asc",
        "field": $ {
          "offset": 0,
          "segments": Array [
            "__name__",
          ],
          "t": 1,
        },
      },
    ],
    "cn": At {
      "Z": "users|f:[email protected]|ob:__name__asc",
      "collectionGroup": null,
      "endAt": null,
      "filters": Array [
        _s {
          "field": $ {
            "offset": 0,
            "segments": Array [
              "email",
            ],
            "t": 1,
          },
          "op": "==",
          "value": Object {
            "stringValue": "[email protected]",
          },
        },
      ],
      "limit": null,
      "orderBy": Array [
        ps {
          "dir": "asc",
          "field": $ {
            "offset": 0,
            "segments": Array [
              "__name__",
            ],
            "t": 1,
          },
        },
      ],
      "path": F {
        "offset": 0,
        "segments": Array [
          "users",
        ],
        "t": 1,
      },
      "startAt": null,
    },
    "collectionGroup": null,
    "endAt": null,
    "filters": Array [
      _s {
        "field": $ {
          "offset": 0,
          "segments": Array [
            "email",
          ],
          "t": 1,
        },
        "op": "==",
        "value": Object {
          "stringValue": "[email protected]",
        },
      },
    ],
    "limit": null,
    "on": "F",
    "path": F {
      "offset": 0,
      "segments": Array [
        "users",
      ],
      "t": 1,
    },
    "rn": Array [],
    "startAt": null,
  },
  "T_": null,
  "Uf": null,
  "metadata": Ec {
    "fromCache": false,
    "hasPendingWrites": false,
  },
  "qf": null,
  "vf": dc {
    "Af": za {
      "U": ft {
        "database": "(default)",
        "projectId": "goalsdev-7eb67",
      },
      "ignoreUndefinedProperties": false,
      "serializer": pe {
        "U": ft {
          "database": "(default)",
          "projectId": "goalsdev-7eb67",
        },
        "Ue": true,
      },
    },
    "Ef": fc {
      "cacheSizeBytes": 41943040,
      "credentials": undefined,
      "experimentalForceLongPolling": false,
      "host": "firestore.googleapis.com",
      "ignoreUndefinedProperties": false,
      "ssl": true,
      "timestampsInSnapshots": true,
    },
    "INTERNAL": Object {
      "delete": [Function _delete],
    },
    "Tf": Wr {
      "Hc": [Function anonymous],
      "Zc": [Function anonymous],
      "auth": Object {
        "addAuthTokenListener": [Function bound ],
        "getToken": [Function bound ],
        "getUid": [Function bound ],
        "removeAuthTokenListener": [Function bound ],
      },
      "currentUser": ti {
        "uid": "BDErkp3H7hbzyce1AVqiS0M6ObT2",
      },
      "eu": 4,
      "forceRefresh": false,
      "tu": true,
    },
    "_f": Ws {
      "As": null,
      "Es": false,
      "Is": Array [],
      "Ps": Array [],
      "Rs": true,
      "Ts": Array [],
      "gs": Ds {
        "En": null,
        "In": 1604894779861,
        "Tn": 0,
        "_n": [Circular],
        "dn": 1000,
        "fn": "async_queue_retry",
        "mn": 60000,
        "wn": 1.5,
      },
      "ws": Promise {
        "_40": 0,
        "_55": Promise {
          "_40": 0,
          "_55": null,
          "_65": 0,
          "_72": null,
        },
        "_65": 3,
        "_72": null,
      },
      "ys": [Function anonymous],
    },
    "df": uc {
      "Dh": Xr {
        "Hu": Yr {
          "au": Ia {
            "Cl": "https://firestore.googleapis.com",
            "Dl": _t {
              "U": ft {
                "database": "(default)",
                "projectId": "goalsdev-7eb67",
              },
              "forceLongPolling": false,
              "host": "firestore.googleapis.com",
              "persistenceKey": "[DEFAULT]",
              "ssl": true,
            },
            "Nl": "projects/goalsdev-7eb67/databases/(default)/documents",
            "U": ft {
              "database": "(default)",
              "projectId": "goalsdev-7eb67",
            },
            "forceLongPolling": false,
          },
          "credentials": Wr {
            "Hc": [Function anonymous],
            "Zc": [Function anonymous],
            "auth": Object {
              "addAuthTokenListener": [Function bound ],
              "getToken": [Function bound ],
              "getUid": [Function bound ],
              "removeAuthTokenListener": [Function bound ],
            },
            "currentUser": ti {
              "uid": "BDErkp3H7hbzyce1AVqiS0M6ObT2",
            },
            "eu": 4,
            "forceRefresh": false,
            "tu": true,
          },
          "ku": false,
          "serializer": pe {
            "U": ft {
              "database": "(default)",
              "projectId": "goalsdev-7eb67",
            },
            "Ue": true,
          },
        },
        "Ju": Array [],
        "Xu": Map {
          40 => pt {
            "et": mt {
              "timestamp": Object {
                "nanoseconds": 178070000,
                "seconds": 1604896308,
              },
            },
            "lastLimboFreeSnapshotVersion": mt {
              "timestamp": Object {
                "nanoseconds": 0,
                "seconds": 0,
              },
            },
            "resumeToken": ct {
              "M": "
       –ÙæÒÐôì",
            },
            "sequenceNumber": 111,
            "target": At {
              "Z": "users|f:[email protected]|ob:__name__asc",
              "collectionGroup": null,
              "endAt": null,
              "filters": Array [
                _s {
                  "field": $ {
                    "offset": 0,
                    "segments": Array [
                      "email",
                    ],
                    "t": 1,
                  },
                  "op": "==",
                  "value": Object {
                    "stringValue": "[email protected]",
                  },
                },
              ],
              "limit": null,
              "orderBy": Array [
                ps {
                  "dir": "asc",
                  "field": $ {
                    "offset": 0,
                    "segments": Array [
                      "__name__",
                    ],
                    "t": 1,
                  },
                },
              ],
              "path": F {
                "offset": 0,
                "segments": Array [
                  "users",
                ],
                "t": 1,
              },
              "startAt": null,
            },
            "targetId": 40,
            "tt": 0,
          },
        },
        "Yu": Object {
          "Be": [Function bound Zo],
          "oh": [Function bound Oo],
          "rh": [Function bound Bo],
          "t_": [Function bound Xo],
        },
        "Zu": Set {},
        "eh": Ra {},
        "hh": zr {
          "_n": Ws {
            "As": null,
            "Es": false,
            "Is": Array [],
            "Ps": Array [],
            "Rs": true,
            "Ts": Array [],
            "gs": Ds {
              "En": null,
              "In": 1604894779861,
              "Tn": 0,
              "_n": [Circular],
              "dn": 1000,
              "fn": "async_queue_retry",
              "mn": 60000,
              "wn": 1.5,
            },
            "ws": Promise {
     ...(truncated to the first 10000 characters)


Just want to get access to the data for the document that's email field == the current user's email

Edit:

firestore().collection('users').where("email", "==", userCurrent).get()
            .then((querySnapshot) => {
                querySnapshot.forEach(doc => {
                    console.log(doc.data())
                })
            })
            .catch((error) => { console.log(error) })

Upvotes: 1

Views: 634

Answers (1)

Doug Stevenson
Doug Stevenson

Reputation: 317712

When you call get() on a Query object:

firestore().collection('users').where("email", "==", userCurrent).get()

It will yield a QuerySnapshot object (not a DocumentSnapshot). That QuerySnapshot can contain 0 or more documents. Even if you think it will contain a single document, you should at least check to see if it contains more than one document:

firestore().collection('users').where("email", "==", userCurrent).get()
.then((querySnapshot) => {
    if (querySnapshot.docs.length > 0) {
        const documentSnapshot = querySnapshot.docs[0];
        console.log(documentSnapshot.data());
    }
    else {
        // decide what you want to do if the query resulted in no documents.
    }
})
.catch((error) => { console.log(error) })

You should also know that onAuthStateChanged is asynchronous and returns immediately, before any user object is known. Your query might be in the wrong place if you're hoping to execute it only after a sign-in is complete.

Upvotes: 4

Related Questions