返回未定义快照的 Firestore 查询(Vue.js / Firestore / Vuefire)
Firestore query with where returning undefined snapshot (Vue.js / Firestore / Vuefire)
我目前正在使用支持 Vuefire 的 Firestore/Vue.js。
Firestore 数据库只有一个集合,里面有几个用户:
- Users
- 001
- name: Jack
- uid: {Firebase auth ID}
- org_id: 123
- 002
- name: Frank
- uid {Firebase auth ID}
- org_id: 456
在 Vue 组件中,我尝试查询数据库以获取使用 auth ID(当前存储在 Vuex Store 中)的第一个用户
<script>
import { db } from "../main.js";
export default {
data() {
return {
items: [] // to be used later
};
},
created() {
this.getServices();
},
methods: {
getServices() {
console.log(this.$store.state.user.uid);
db.collection("users")
//.doc("001")
.where("uid", "==", this.$store.state.user.uid)
.get()
.then((snapshot) => {
console.log(snapshot);
if (snapshot != null && snapshot.data != null) {
const user = snapshot.data();
// do something with document
let org_id = user["org_id"];
console.log("org id:" + org_id);
} else {
console.log("No data returned!");
}
});
},
},
};
</script>
代码总是 returns 空快照。我执行的检查:
- 直接使用文档 ID 访问文档是可行的
this.$store.state.user.uid
设置正确
- 硬编码 where 子句中的
uid
给出相同的错误
我完全是个初学者,但在我看来 where 子句不起作用。
因为 db.collection("users").where("uid", "==", this.$store.state.user.uid)
你定义了一个 Query
, the snapshot
Object is actually a QuerySnapshot
and not a DocumentSnapshot
.
所以snapshot.data != null
总是false
因为QuerySnapshot
没有这样的属性。 snapshot.data() != null
也是如此 => 它总是 false
因为 QuerySnapshot
没有这样的 方法 .
您应该使用 forEach()
method or use map
on the docs
property, as shown in the Vuefire example 遍历 QuerySnapshot
(请参阅“检索集合”):
db.collection("users")
.where("uid", "==", this.$store.state.user.uid)
.get()
.then((snapshot) => {
const documents = snapshot.docs.map(doc => doc.data())
// do something with documents
})
我目前正在使用支持 Vuefire 的 Firestore/Vue.js。
Firestore 数据库只有一个集合,里面有几个用户:
- Users
- 001
- name: Jack
- uid: {Firebase auth ID}
- org_id: 123
- 002
- name: Frank
- uid {Firebase auth ID}
- org_id: 456
在 Vue 组件中,我尝试查询数据库以获取使用 auth ID(当前存储在 Vuex Store 中)的第一个用户
<script>
import { db } from "../main.js";
export default {
data() {
return {
items: [] // to be used later
};
},
created() {
this.getServices();
},
methods: {
getServices() {
console.log(this.$store.state.user.uid);
db.collection("users")
//.doc("001")
.where("uid", "==", this.$store.state.user.uid)
.get()
.then((snapshot) => {
console.log(snapshot);
if (snapshot != null && snapshot.data != null) {
const user = snapshot.data();
// do something with document
let org_id = user["org_id"];
console.log("org id:" + org_id);
} else {
console.log("No data returned!");
}
});
},
},
};
</script>
代码总是 returns 空快照。我执行的检查:
- 直接使用文档 ID 访问文档是可行的
this.$store.state.user.uid
设置正确- 硬编码 where 子句中的
uid
给出相同的错误
我完全是个初学者,但在我看来 where 子句不起作用。
因为 db.collection("users").where("uid", "==", this.$store.state.user.uid)
你定义了一个 Query
, the snapshot
Object is actually a QuerySnapshot
and not a DocumentSnapshot
.
所以snapshot.data != null
总是false
因为QuerySnapshot
没有这样的属性。 snapshot.data() != null
也是如此 => 它总是 false
因为 QuerySnapshot
没有这样的 方法 .
您应该使用 forEach()
method or use map
on the docs
property, as shown in the Vuefire example 遍历 QuerySnapshot
(请参阅“检索集合”):
db.collection("users")
.where("uid", "==", this.$store.state.user.uid)
.get()
.then((snapshot) => {
const documents = snapshot.docs.map(doc => doc.data())
// do something with documents
})