【问题标题】:Firestore query (Web v9) not returning any resultsFirestore 查询(Web v9)不返回任何结果
【发布时间】:2022-01-14 07:50:46
【问题描述】:

我正在尝试查询一个非常简单的集合,如下所示:

urls: {
    07WmGw7w0N8JiD7j1P60: {
       url: "www.yay.com"
    },
    07WmGw7w0N8JiD7j1P60: {
       url: "www.anotherurl.com"
    }
}

所以我的代码如下所示:

export async function checkDoc() {
  try {
    const urlsRef = await collection(db, "urls");
    const q = await query(urlsRef, where("url", "==", "www.yay.com"));

    console.log(q)
    return q
  } catch (e) {
    console.error("Error querying document: ", e);
    return e.response
  }
}

但我得到的回应是这样的:

据我所知,这正是in the documentation 的完成方式。我已经在 Stackoverflow 上搜索了类似的答案,但他们主要使用 Web v8 链接方法,我不确定如何用我当前的设置来实现。是我使用 firebase 的方式还是我进行异步调用的方式有问题?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore async-await


    【解决方案1】:

    这是因为您实际上并没有查询数据库,而只是构建了一个 query(即 q 对象)。

    要根据此查询查询/获取数据库,您需要将此query 传递给getDocs() 方法,如下所示:

    export async function checkDoc() {
      try {
        const urlsRef = collection(db, "urls");
        const q = query(urlsRef, where("url", "==", "www.yay.com"));
    
        const querySnapshot = await getDocs(q);
    
        querySnapshot.forEach(docSnap => {
            // ....
        })
    
        return ...   // Generate the returned object in the forEach loop, see link below
    
      } catch (e) {
        console.error("Error querying document: ", e);
        return e.response
      }
    }
    

    这在 Firestore 文档中显示为 here。请注意collection()query() 方法不是异步的,因此无需使用await 调用它们。相反,getDocs() 是异步的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多