Firestore 4.5.0+带可选条件的OR过滤是否有官方实现方案?
Firestore 可选条件下使用 Filter.or 的优雅实现
核心思路
通过动态构建过滤条件数组,根据数组长度决定使用Filter.or还是单个过滤条件,避免传入重复的冗余规则,让代码逻辑更清晰。
具体代码实现
- 先初始化包含固定条件的数组:
List<Filter> filters = [ Filter(BackendKeys.wishlist.wishlistVisiblity, isEqualTo: WishlistVisibility.public.name) ];
- 根据可选条件的状态,动态追加过滤规则:
if (status == FriendRequestStatus.accepted) { filters.add( Filter(BackendKeys.wishlist.wishlistVisiblity, isEqualTo: WishlistVisibility.friends.name) ); }
- 最后根据条件数组的长度构建查询:
var wishlistCollectionRef = firestoreInstance .collection(BackendKeys.user.allUsers) .doc(uid) .collection(BackendKeys.wishlist.wishlists); // 条件数大于1时用Filter.or,否则直接用单个条件 if (filters.length > 1) { wishlistCollectionRef = wishlistCollectionRef.where(Filter.or(...filters)); } else { wishlistCollectionRef = wishlistCollectionRef.where(filters.first); }
逻辑说明
Firestore 要求Filter.or至少传入2个条件,本质是避免无意义的冗余逻辑(单个条件用or和直接过滤效果完全一致)。这种动态构建条件的方式既符合API的设计要求,又能让代码逻辑更直观,不会出现重复的过滤规则。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

