返回未定义快照的 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 空快照。我执行的检查:

我完全是个初学者,但在我看来 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
   })