为啥 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 thegetCollections()
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() 不被识别为函数?的主要内容,如果未能解决你的问题,请参考以下文章