使用 "where" 查询从没有特定 doc() 的 firebase 文档中获取数据

get data from firebase document with "where" query without specific doc()

我正在尝试查找值“phone”等于用户输入的 phone 数字的文档

我试过:

async getUserIdOfPhoneNumber(phone){
 

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

但这会返回未定义,因为我没有在 doc() 中提供 ID,我不想提供 ID,因为我不知道用户输入的 phone 数字相等的集合的 ID到所述文档

中的phone值

删除 doc() 函数只会带来不同的混乱。数据()然后不存在

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

因为我认为这里不需要使用 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