Reputation: 545
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
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