【问题标题】:get data from firebase document with "where" query without specific doc()使用“where”查询从 firebase 文档中获取数据,而无需特定的 doc()
【发布时间】:2021-11-24 06:48:03
【问题描述】:

我正在尝试查找值“电话”等于用户输入的电话号码的文档

我试过了:

async getUserIdOfPhoneNumber(phone){
 

  this.afs.collection("users", ref => ref.where("phone", "==",phone)).doc().get().toPromise().then(() => {
  console.log(res.data())
  })

但这会带回未定义,因为我没有在 doc() 中提供 id,我不想提供 id,因为我不知道用户输入的电话号码等于所述电话值的集合的 id文档

删除 doc() 函数只会带来不同的混乱。 data() 则不存在

【问题讨论】:

    标签: angularjs firebase


    【解决方案1】:

    当您执行查询时,可能会有多个结果。即使您知道只有一个结果,API 也不知道这一点,因此它返回一个列表。您的应用程序代码必须处理此列表。

    由于我认为这里不需要使用 AngularFire,因此您可以通过以下方式在常规 JavaScript SDK(v8 语法)中获取查询结果:

    firebase.firestore()
      .collection("users")
      .where("phone", "==",phone)
      .get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
          console.log(doc.id, doc.data());
        });
      })
    

    既然你知道最多有一个结果,你也可以这样做:

      ...
      .get().then((querySnapshot) => {
        if (!querySnapshot.empty) {
          console.log(querySnapshot.docs[0].id, querySnapshot.docs[0].data());
        });
      })
    

    如果您需要使用 AngularFire 执行此操作(即,如果您想在 UI 中显示文档),您可以使用 first() 从 observable 中获取第一项。有关这方面的更多信息,请参阅:https://www.google.com/search?q=angular+observable+get+first+value

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 2020-11-05
      • 2020-06-29
      • 2018-07-31
      • 2020-10-11
      • 2018-10-31
      • 1970-01-01
      相关资源
      最近更新 更多