我只想顯示 10 個按 numberOfLikes 降序排列且在過去 24 小時內創建的檔案。但是每當我使用 where() 和 orderBy() 時,邏輯就會失敗。運行下面的代碼后,我添加了 Firebase 所需的索引,但檔案是按最近發布的而不是最喜歡的排序的。這是不可能的,如果是這樣,我還能如何實作這一目標?注意:numberOfLikes 是 firestore 資料庫中的一個數字。我將不勝感激任何幫助。謝謝你。
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('posts')
.where("datePublished",
isGreaterThan:
DateTime.now().subtract(const Duration(hours: 24)))
.orderBy("datePublished", descending: true)
.orderBy("numberOfLikes", descending: true)
.limit(10)
.snapshots(),
builder: (context,
AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
}
if (snapshot.hasError) {
print(snapshot.error);
return Text("No Posts Found");
}
return Container(
height: MediaQuery.of(context).size.height * .37,
width: MediaQuery.of(context).size.width * .98,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) => TrendingPostsCard(
snap: snapshot.data!.docs[index].data(),
),
),
);
},
),
uj5u.com熱心網友回復:
由于您總是需要在要執行關系條件(即>=)的欄位上進行排序,因此您無法在某個范圍內獲得前 X 個被點贊的帖子。
你可以:
- 獲取日期范圍內的所有帖子,然后在您的應用程式代碼中排序/過濾前 10 個帖子。
- 或者獲取所有日期的前 N ??個帖子,然后按日期范圍過濾。這里的問題是 N 不是一個已知值。
這種限制是 Firestore(和許多 NoSQL 資料庫)作業方式所固有的,因為它們對整個查詢使用單個索引 - 并且只有一種>型別的操作是可能的。有關這方面的更多資訊,另請參閱 Todd 關于了解 Cloud Firestore的精彩視頻,特別是 Cloud Firestore 中的查詢如何作業?您還可以從我自己關于在 Firebase 和 Firestore 上實作地理查詢的演講中了解這些復雜性。
如果您希望能夠在查詢中執行這兩個條件,則需要確保其中一個部分具有相等條件。例如,如果您為每個帖子保留一張帶有日期的地圖,您可以執行相等查詢以獲取今天的帖子,然后使用orderBy/limit組合來查找最喜歡的帖子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/519717.html
