2017-10-11 62 views
0

我試圖從遷移實時數據庫結構如下,以公司的FireStore:如何構建Firestore中的集合的子節點?

• Resources 
    o SENT 
      resId1 
       • name : xxxx 
       • url : xxx 
      resI2 
       • name …… 
    o ACCEPT 
      resId3 
      etc…… 
    o REFUSED 
      restIdn 
      etc…. 

所以在根節點「資源」我有一些子節點(SENT接受,拒絕...)包含資源項目清單。

隨着公司的FireStore看來我不能有子集合直接託收項下(當我嘗試重現這種結構與公司的FireStore在管理控制檯中,我需要創造這樣一箇中間文件:

Collection --> document --> SubCollection --> documents 

女巫導致該結構:

Resources --> SENT --> SENT --> resId1 {name: xxx, url: yyyy} 

所以子節點「已發送」被重複兩次(一個用於文件和一個子集) 這不是一個改進或簡化所有,如果我火力比較實時數據庫。
我錯過了什麼嗎?這種數據庫結構的最佳方式是什麼?

回答

3

(編輯2017年10月13日上午11點@)

看來,有兩種結構,會爲你工作。

選項1:三個集合

在你公司的FireStore數據庫的根目錄下創建三個集合

  • resources-sent
  • resources-accept
  • resources-refused

每個包含文檔。

選項2:一個根收集

公司的FireStore允許複合查詢,這樣你就可以只讓在叫resources根一個收集和type參數添加到每個文檔,其中type[sent, accept, refused]之一。

然後,你可以做的查詢是這樣的:

// Get all sent resources 
db.collection("resources").where("type", "==", "sent").get() 

由於公司的FireStore內置的索引這個查詢總是會快「!

選項3:子集合。

創建根集合稱爲resources包含只有三個文檔:

  • sent
  • accept
  • refused

對於這些文檔的創建resources子集合。

因此,要獲得所有發送的資源:

// Get all sent resources 
db.collection("resources").doc("sent").collection("resources").get() 
+0

沒有資源不是特定項目的根數據庫,它只是一個集合(或節點)。我可能有超過3個子類別 – toofoo

+0

資源是否屬於其他文檔?我需要更多信息。 –

+0

沒有資源是根後的第一個節點(比如一種TABLE);還有一些其他的根節點,唯一不同的是這個節點「資源」被劃分在子類別中(例如已發送,接受等.....) – toofoo

相關問題