我添加了一个流到我的小部件,但当我添加orderby()和where()的同时发生以下AssertionError:
Widget:
child: StreamBuilder(
stream: FirebaseFirestore.instance
.collection("users")
.doc(currenUserUid)
.collection("chat")
.where('modlerUid', whereNotIn: _user.blockedList)
.orderBy("time", descending: true)
.snapshots(),
发生异常。_AssertionError('package:cloud_firestore/src/query. dart':Assert失败:第489行位置13:'conditionField == orders[0][0]':当调用不等运算符时,初始orderBy()字段“FieldPath([time]),true[0][0]”必须与where()字段参数“FieldPath([modlerUid])”相同。
1条答案
按热度按时间k5ifujac1#
错误消息非常明确:为了使用
whereNotIn
子句,首先必须在同一字段上有orderBy
。这意味着您的结果将first在
modlerUid
上排序,然后才在time
上排序。这是因为Firestore的查询模型,并且没有办法以不同的方式配置它。如果您希望结果以
time
顺序 * 和 * 过滤,并在modlerUid上使用whereNotIn
,则必须在应用程序中重新排序结果。要了解有关Firestore如何执行查询的更多信息,以及为什么这可能会导致您不习惯于其他数据库的某些限制,我建议您观看Get to know Cloud Firestore系列-特别是How do queries work in Cloud Firestore?上的一集