【问题标题】:Firestore query is only returning 1 docFirestore 查询仅返回 1 个文档
【发布时间】:2022-02-15 09:00:56
【问题描述】:

我编写了一个简单的 Firebase 函数来获取名为“事件”的集合中的所有文档。 我的代码:

export const requestuserroute2 = functions
    .region("europe-west6")
    .https.onRequest(async (request, response) =>{
      const uid = String(request.query.uid);
      const db = admin.firestore();
      db.collection("position_data")
          .doc(uid).collection("events")
          .get()
          .then((snapshot) => {
            snapshot.forEach((doc) => {
              const data = JSON.stringify(doc.data(), replaceg);
              response.send(data);
            });
          });
    });

replaceg 是一个删除键为“g”的数据的函数。 (请忽略)

它只返回第一个文档的内容(以 *Mnija 结尾):

{"timeStamp":1644760476557,"coordinates":{"_latitude":13.1,"_longitude":31.562},"sid":"b72b98b0-7130-41bd-9c67-ed79128c070a","type":"pause_off "}

我期望的是多行数据,每个文档 1 行。代码似乎没有在文档中循环。那么我哪里错了?

【问题讨论】:

    标签: node.js firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    这是因为您在循环内向客户端发送响应:

    snapshot.forEach((doc) => {
      const data = JSON.stringify(doc.data(), replaceg);
      response.send(data);
    });
    

    第一次通过循环将数据发送到客户端,而所有其他时间调用都被忽略(它实际上应该引发错误,但是¯\_(ツ)_/¯)。

    要将所有文档发送给调用者,请在循环中构建单个响应并然后发送:

    db.collection("position_data")
        .doc(uid).collection("events")
        .get()
        .then((snapshot) => {
          const result = snapshot.docs.map((doc) => {
            return JSON.stringify(doc.data(), replaceg);          
          });
          response.send(result);
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多