我有一个困扰我好几天的问题。我正在尝试创建一个从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 '';
});
有人知道我做错了什么吗?非常感谢。
<代码>。get()获取所有文档。在您的情况下,这些文档是空的,因此。get()
不考虑它们。
我找到的最简单的解决方案是替换。get()
与。listDocuments()
。现在,您可以像读取文档一样读取每个文档条目。
再次感谢道格的帮助。
我设法解决了我的问题。这是我的完整解决方案。
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 '';
});
您的用户集合实际上是空的。看到文档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的当一个通知正在发送。我尝试过很多事情,但还没有看到完成这件事的新方法。 编辑:这是我的代码。 });