存取Cloud Firestore 中的子集合名稱
在文件中列出子集合是組織和導航儲存在Cloud Firestore 分層結構中的數據的常見要求。但是,在客戶端 SDK(包括 Web、iOS 和 Android)中,不直接支援檢索完整的子集合清單。
客戶端限制:
如官方文件所述,「使用行動/Web 用戶端程式庫無法擷取集合清單。」此設計選擇旨在透過限制子集合名稱的存取來增強安全性,主要用於在受信任的伺服器環境中執行的管理任務。
在客戶端 SDK 中,存取文件僅傳回欄位名稱和值,不包括任何子集合名稱。例如,以下程式碼片段將僅記錄欄位名稱,而不記錄子集合名稱:
rootRef.doc('aDocument').get() .then(doc => { // only logs [ "someField", "anotherField" ], no collections console.log( Object.keys(doc.data()) ) })
伺服器端解決方案:
但是,在伺服器中支援側SDK(例如Node.js)存取子集合名稱。對於 Node.js,ListCollectionIds 方法提供了一種檢索文件中子集合名稱的方法。
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); });
此方法傳回表示指定文件中子集合名稱的字串陣列。
替代方法:
如果直接存取子集合名稱在客戶端環境中至關重要,請考慮重構數據,以便可以從文件結構中邏輯推斷或派生子集合名稱。這種方法可以讓您優雅地解決該限制。
以上是如何檢索 Cloud Firestore 中的子集合名稱清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!