最近我將我的數據模型從Firebase
移至Firestore
。我所有的代碼都在工作,但是我有一些關於我的嵌套查詢的難題來檢索一些數據。這裏是點:Firestore:使用嵌套的單個查詢
現在對於這部分我的數據模型看起來像這樣(是另一個追隨者/飼料的例子!):
{
"Users": { //Collection
"UserId1" : { //Document
"Feed" : { //Subcollection of Id of posts from users this user Follow
"PostId1" : { //Document
"timeStamp" : "SomeDate"
},
"PostId2" : {
"timeStamp" : "SomeDate"
},
"PostId3" : {
"timeStamp" : "SomeDate"
}
}
//Some data
}
},
"Posts":{ //Collection
"PostId1":{ //Document
"Comments" :{ //Subcollection
"commentId" : { //Document
"authorId": "UserId1"
//comentsData
}
},
"Likes" : { //Subcollection
"UserId1" : { //Document
"liked" : true
}
}
}
}
}
好吧,我的問題,現在是爲檢索的職位,一個用戶的飼料,我應該在接下來的方式查詢:
- 從我的頻道獲取由時間戳上次X文件訂貨
feedCol(userId).orderBy(CREATION_DATE, Query.Direction.DESCENDING).limit(limit)
之後,我應該做的,從列表中檢索每個崗位的單一查詢:
workoutPostCol.document(postId)
現在我每個帖子的數據,但我想拍攝的用戶名,圖片,分。 。筆者,這是一個不同的
Document
,所以,再次我應該做的職位userSocial(userId).document(toId)
最後,並非不重要的列表中檢索每個
authorId
另一個單查詢等,我需要知道,如果我當前用戶已經喜歡該帖子,所以我需要做的每一個職位(再次)一個查詢和檢查,如果我的用戶id是內部posts/likes/{userId}
現在一切工作,但認爲的Firestore
價格取決於數據庫調用的次數並且它不會讓我的查詢變得更簡單,我不知道我的數據模型是否適合這種數據庫,並且我應該移動到正常的SQL
或者只是再次回到Firebase
。
注意:我知道這一切,將是一個很多更容易移動的喜歡,飼料等的這個子集裏面我的用戶或交文件的ArrayList,但文件的限制是1MB,如果這增長很多,將來會崩潰。另一方面,Firestore
不允許使用多個whereEqualTo
的子文檔查詢(尚)或OR
子句。
我從誰擁有尋找一個簡單的方法來存儲這種ID's
關係,使joins
和queries
在他們Collections
,使用Arraylists
將是真棒問題的用戶看了很多帖子,但1MB的上限限制它很多。
希望有人能夠澄清我的想法,或者至少教會我一些新的東西,也許我的模型只是廢話,有一個簡單和最簡單的方法來做到這一點。或者,也許我的模型不適用於非sql數據庫。
謝謝大家的一切,祝你有美好的一天。
我喜歡'events'部分,我認爲這樣也可以控制通知只發送一次。另一方面,我已經看到,我應該更多地反常化我的數據(保存用戶名和photoUrl而不僅僅是ID),用戶不會經常更改他們的名字或圖片,並且最終會比添加無限嵌套查詢在帖子,評論,喜歡...等 –
最後,我認爲,對於'飼料'我應該留在引用的每個用戶的帖子的引用列表,最終導致,只複製一次或刪除只需要一次所有的ID就會比通過大量查詢來檢索每次我關注的每個用戶的最後一個帖子都更容易,我希望檢查我的feed。 –
@FranciscoDurdinGarcia - 我建議instagram的API的原因是因爲我相信他們也設法使用'events'方法來保持它的亮度。關於保留你關注的用戶所有帖子的清單,這是一個滑坡,因爲這需要一個反向數據模型。假設你正在關注我,我發了帖子。這就要求我寫一段數據給你的用戶。除了使安全更爲複雜,規模之外,如果我有20萬個關注者,該解決方案將要求我的用戶將1個帖子寫入200k個其他用戶的個人資料中。我會根據您的估算比例選擇該部分。 – johnozbay