有没有办法 select 仅来自 Firestore 的某些字段?

Is there a way to select only certain fields from Firestore?

我正在处理一个函数的性能问题,它需要 15 秒才能响应,它向 firebase 发出所有文档的请求 "ErrorID" "==" "0" 问题是有很多文档,它们是非常大的对象,我只需要每个文档的 TWO FIELDS (Order and Amount),有任何方法可以只请求那些满足条件的两个字段?

类似于:

firestore.collection("purchases").where("ErrorID", "==", "0").get(Order, Amount); 

我说的函数:

const totalEarn = async (req, res, next) => {
  const DAY = 86400000;
  const WEEK = 604800016;
  const MONTH = 2629800000;

  try {
    let snap = await firestore.collection("purchases").where("ErrorID", "==", "0").get(); // CONDITION
    let totalToday = 0;
    let totalYesterday = 0;
    let totalLastWeek = 0;
    let totalLastMonth = 0;
    let now = Date.now();
    let Yesterday = now - 86400000;

    await snap.forEach((doc) => { // THIS FOR EACH TAKES TOO MUCH TIME
      let info = doc.data();
      let time = info.Order.split("-")[2]; // FIRESTORE FIELD -> ORDER
      let amount = info.AmountEur * 1; // FIRESTORE FIELD -> AMOUNT

      if (time > now - DAY) {
        totalToday = totalToday + amount;
      }
      if (time < now - DAY && time > Yesterday - DAY) {
        totalYesterday = totalYesterday + amount;
      }
      if (time > now - WEEK) {
        totalLastWeek = totalLastWeek + amount;
      }
      if (time > now - MONTH) {
        totalLastMonth = totalLastMonth + amount;
      }
    });

    res.send({
      status: true,
      data: {
        totalToday: totalToday.toFixed(2),
        totalYesterday: totalYesterday.toFixed(2),
        totalLastWeek: totalLastWeek.toFixed(2),
        totalLastMonth: totalLastMonth.toFixed(2),
      },
    });
  } catch (error) {
    res.status(410).send({
      status: false,
      error: "some error occured counting the numbers",
      e: error.message,
    });
  }
};

我正在谈论的文档

如果您使用 Firestore Node.JS client or Firebase Admin SDK, then you can use select() 到 select 字段:

import { Firestore } from "@google-cloud/firestore";

const firestore = new Firestore();

const snap = firestore
  .collection("purchases")
  .where("ErrorID", "==", "0")
  .select("Order", "Amount")
  .get();