Accessing Subcollection Names in Cloud Firestore
Listing subcollections in a document is a common requirement for organizing and navigating data stored in Cloud Firestore's hierarchical structure. However, in the client SDKs (including Web, iOS, and Android), retrieving a complete list of subcollections is not supported directly.
Client-Side Limitations:
As specified in the official documentation, "retrieving a list of collections is not possible with the mobile/web client libraries." This design choice aims to enhance security by restricting access to subcollection names, primarily for administrative tasks performed in trusted server environments.
In the client SDKs, accessing a document only returns the field names and values, excluding any subcollection names. For instance, the following code snippet will only log the field names, but not the subcollection names:
rootRef.doc('aDocument').get() .then(doc => { // only logs [ "someField", "anotherField" ], no collections console.log( Object.keys(doc.data()) ) })
Server-Side Solution:
However, in server-side SDKs, such as Node.js, accessing subcollection names is supported. For Node.js, the ListCollectionIds method offers a way to retrieve the names of subcollections in a document.
var firestore = require('firestore.v1beta1'); var client = firestore.v1beta1({ // optional auth parameters. }); // Iterate over all elements. var formattedParent = client.anyPathPath("[PROJECT]", "[DATABASE]", "[DOCUMENT]", "[ANY_PATH]"); client.listCollectionIds({parent: formattedParent}).then(function(responses) { var resources = responses[0]; for (var i = 0; i < resources.length; ++i) { // doThingsWith(resources[i]) } }) .catch(function(err) { console.error(err); });
This method returns an array of strings representing the names of the subcollections within the specified document.
Alternative Approach:
If direct access to subcollection names is crucial in a client-side environment, consider restructuring your data such that subcollection names can be inferred or derived logically from the document structure. This approach allows you to work around the limitation gracefully.
The above is the detailed content of How Can I Retrieve a List of Subcollection Names in Cloud Firestore?. For more information, please follow other related articles on the PHP Chinese website!