簡體   English   中英

Android Firebase Firestore SDK:如何根據另一個集合的文檔字段從集合中訂購文檔?

[英]Android Firebase Firestore SDK: How to order documents from a collection, according to the field of documents of another collection?

我的想法是為帖子創建一個喜歡和不喜歡的系統(用戶可以喜歡和不喜歡帖子)並在片段中顯示用戶列表,按以下方式排序:頂級用戶是最多喜歡的用戶。

在我的 Firebase Firestore 數據庫中:

  • 我有一個帖子集合。 每個文檔(這是一個帖子)都包含創建它的用戶的 ID,以及一個點贊數(我稱之為“A”)。

  • 我有另一個用戶集合。 每個文檔(即用戶)都包含一個計數器(我稱之為“B”),它計算喜歡的數量,所有帖子的總和。

目前,我使用“B”對上面描述的用戶列表中的用戶進行排序。 我這樣使用“B”: return FirebaseFirestore.getInstance().collection("users").orderBy("likes", Query.Direction.DESCENDING); .

但是,由於與 Firebase 安全規則相關的一些技術事實,並且為了簡化數據庫結構,我只想使用“A”,並刪除“B”。 更准確地說,我想獲得所有用戶,並根據“A”對他們進行排序。 但是,計數器“A”是在帖子集合的文檔中定義的,而計數器“B”是在用戶集合的文檔中定義的:這樣更容易使用。

所以我的問題是:對於每個用戶,我必須得到他們所有的帖子,然后總結他們的計數器“A”,然后得到所有用戶,然后根據這個總和對他們進行排序。 但是,我想知道:是否可以使用 Firebase Firestore Android API 來做到這一點? (類似於之前給出的指令)換句話說:如何根據另一個集合的文檔字段從集合中排序文檔? 但請注意,實際上它更難,因為我必須總結用戶創建的每個帖子的計數器“A”。

您嘗試做的本質上是“加入”類型的操作,Firestore 不支持該操作。 Firestore 查詢一次只能考慮單個集合中的文檔。 如果您有來自兩個 collections 的數據用於生成查詢結果,您將至少有兩個查詢要執行。

您唯一真正的選擇是引入第三個集合,其中的數據已經從支持您要進行的查詢的其他兩個 collections 合並。 這在 NoSQL 類型的數據庫中很常見,稱為“反規范化”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM