为啥 ref.getCollections() 不被识别为函数?

Posted

技术标签:

【中文标题】为啥 ref.getCollections() 不被识别为函数?【英文标题】:Why ref.getCollections() is not recognized as a function?为什么 ref.getCollections() 不被识别为函数? 【发布时间】:2019-10-23 20:36:56 【问题描述】:

我正在做一个将用户数据存储在云 Firestore 上的网站。我用它来一次获取用户文档的所有子集合:

db.collection('users').doc(userID).getCollections().then( collections => 
  /*I get my collections and I enjoy it :D*/
)

问题是无法识别此功能。我在控制台上找到了这条消息:

TypeError: db.collection(...).doc(...).getCollections is not a function

我知道我可以获取所有子集合,但由于配额有限,我想保存最大的读数。所有其他 firebase 函数都在我的项目中工作(如 get()set()),getCollections() 在文档中。 感谢您的帮助!

【问题讨论】:

你确定这是在 Node.js 中吗? The web client does not have the getCollections() method, but the Node.js client does. 我使用 React。但也许我必须导入一些东西?我不知道。 @ValentinGegoux 所以你是用 Node.js 编写的,但是它正在被编译并作为静态资源提供给浏览器......所以这意味着你确实在使用 firebase Web 客户端,它没有有getCollections。这就是为什么我问你是否确定它是 Node.js :P 你是否使用 node.js 并不重要。重要的是这段代码 javascript 运行的位置。如果它在浏览器中运行,则会出现错误消息,因为客户端 SDK 中没有 getCollections()。如果此代码在 Node.js 脚本中运行服务器端,它可能取决于您使用的 Firebase Admin SDK 的版本。目前没有足够的信息让我们确定它是哪一个,或者它是否可能完全是别的东西。 感谢您的回答。我做了一些研究,我开始明白了。我不使用 Firebase Admin SDK,而是使用客户端 SDK(我猜是最基本的),并且我不使用任何服务器或其他 Node 环境。所以我的代码在客户端运行。这意味着,根据文档,我不应该尝试使用此功能。你有另一种方法来获得一次子收藏吗?我可以得到每个用户的每个子集合,但是读取太多了...... 【参考方案1】:

在您的示例中 db.collection('users').doc(userID) 返回 DocumentReference 据我所知,DocumentReference 对象不支持 getCollections 方法

这里是文档https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentReference

【讨论】:

【参考方案2】:

Google 团队已将方法名称从“getCollections”替换为“listCollections”。因此,您应该再次更新此方法名称。 参考这里https://googleapis.dev/nodejs/firestore/latest/DocumentReference.html#listCollections

它适用于以下工具版本:firebase-tools v7.2.1、firebase-admin v8.3.0、firebase-functions v3.2.0。

【讨论】:

以上是关于为啥 ref.getCollections() 不被识别为函数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥需要softmax函数?为啥不简单归一化?

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

gprof 适合分析长时间运行的程序吗?为啥或者为啥不?

为啥每次都加载新的 xib 文件?为啥不替换前一个?

在执行语义分割任务时我应该减去图像均值吗?为啥或者为啥不?

为啥 int 存在于 C 中,为啥不只是 short 和 long