当前位置: 首页 > 知识库问答 >
问题:

Firestore云函数空集合

石俊雄
2023-03-14

我有一个困扰我好几天的问题。我正在尝试创建一个从Firestore数据库读取的Firebase云函数。

我的Firestore DB如下所示:

问题是我无法像这样列出用户

db.collection('users').get().then((snapshot) => snapshot.forEach(...));

如果我尝试这样做,我会得到空响应,就像我的用户集合中没有用户一样。

但我尝试直接访问用户它可以工作:

await db.collection('users/5CZxgu8nmNXu2TgplwOUdOIt8e33/receipts').get()

我的完整代码:

import * as functions from 'firebase-functions';

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.cat = functions.https.onRequest(async (req, res) => {
    const receiptList: any = [];
    const db: Firestore = admin.firestore();

    const usersRef = await db.collection('users').get();
    console.log(usersRef.empty);        // Returns true

    const receiptsRef = await db
        .collection('users/5CZxgu8nmNXu2TgplwOUdOIt8e33/receipts')
        .get();

    receiptsRef.forEach((receipt: any) => {
        console.log(receipt);
        receiptList.push(receipt);
        // Here I can access data
    });

    res.send(receiptList);
    return '';
});

有人知道我做错了什么吗?非常感谢。

共有3个答案

凌宏大
2023-03-14

<代码>。get()获取所有文档。在您的情况下,这些文档是空的,因此。get()不考虑它们。

我找到的最简单的解决方案是替换。get()。listDocuments()。现在,您可以像读取文档一样读取每个文档条目。

赫连宏伯
2023-03-14

再次感谢道格的帮助。

我设法解决了我的问题。这是我的完整解决方案。

import * as functions from 'firebase-functions';
import {
    Firestore
} from '@google-cloud/firestore';

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.cat = functions.https.onRequest(async (req, res) => {
    const receiptList: any = [];
    const db: Firestore = admin.firestore();

    const receipts = await db.collectionGroup('receipts').get();
    receipts.forEach((doc: any) => {
        console.log(doc.id, ' => ', doc.data());
        receiptList.push(doc.data());
    });
    res.send(receiptList);
    return '';
});
岳杜吟
2023-03-14

您的用户集合实际上是空的。看到文档ID是如何以斜体显示的吗?这意味着实际上没有一个文档在它的位置上,但是,有一些子集合,文档在它们下面组织。

当您查询集合时,您只获取该集合中的文档。查询不会获取在子集合中组织的文档。在这方面,查询被称为“浅”。如您所见,您需要更深入地访问子集合以获取其文档。

最重要的是,您显示的查询正在执行它们应该执行的操作。

 类似资料:
  • 因此,我正在构建一个云函数,它接受customerID,根据customerID过滤文档,并返回文档列表。遗憾的是,它返回一个空数组。我相信这是一个简单的解决办法。 以下是云功能: 下面是我从客户端调用它时的代码。 此外,这里是一个萤火虫的屏幕截图。 firestore的截图

  • 我试图从云函数动态地为集合中的文档创建集合和子集合,但我遇到了以下异常** 参数“CollectionPath”必须指向集合,但为“Data/C2F7C4E84366”。您的路径不包含奇数个组件 ** 原木- 错误:参数“documentpath”必须指向一个文档,但它是“exports/user343434_inbox/profile”。您的路径不包含偶数个组件。在firestore.doc(/

  • 云功能文档说 //使用Firebase管理SDK访问Firebase实时数据库。const admin=require('firebase-admin');管理初始化EAPP(); 我使用的是Cloud Firesta,而不是实时数据库。我如何访问它?

  • 我试图在云函数中获得通过firebase web sdk验证的用户的UID。cloud函数由cloud FireStore的事件触发。 当登录用户正在创建/更新CAFE中的项目时,会触发此功能。身份验证由处理。安全规则仅对登录的用户启用写操作。因此该事件可以绑定到用户。 文档中有处理的示例,但在所有这些情况下,userId都是文档路径的一部分。但是在这个模型中,用户不是路径的一部分,因为一个咖啡馆

  • 我正在编写云函数,Firez是这样自动导入的。 但在部署时,错误如下所示。我试着这样做,它部署没有任何错误,但我不确定这是正确的方式与否。 有人知道吗? node_modules/@googlecloud/firestore/types/firestore。d、 ts:28:15-错误TS2300:重复标识符“DocumentData”。 28导出类型DocumentData={[field: s

  • 我在以前的项目中使用过这个Firebase数据库代码: 我现在正在尝试将其转换为FireStore。我基本上是试图让我的用户FCM的当一个通知正在发送。我尝试过很多事情,但还没有看到完成这件事的新方法。 编辑:这是我的代码。 });