Flutter Cloud Firestore whereIn 子句

Posted

技术标签:

【中文标题】Flutter Cloud Firestore whereIn 子句【英文标题】:Flutter Cloud Firestore whereIn clause 【发布时间】:2020-05-01 08:16:26 【问题描述】:

我尝试使用此代码从 Cloud Firestore 获取一些列表

final User user = UserUtils.currentUser(context);

final List<String> memberLists = user.memberLists.toList();
final List<String> ownedLists = user.ownedLists.toList();
final List<String> visibleListsIds = memberLists + ownedLists;

final Query query = (sharedCollection.where(FIELD_LIST_ID, whereIn: visibleListsIds));

log.d("queryPath: $query.reference().path");
log.d("buildArguments: $query.buildArguments()");

return query.snapshots().map((QuerySnapshot querySnapshot) 
      return querySnapshot.documents
          .map(
            (document) 
              log.d("document: $document.documentID");
              return _getSerializers()
                  .deserializeWith(WishList.serializer, document.data);
            ,
          )
          .where((value) => value != null)
          .toList();
    );

当我这样做时,我没有得到任何带有“document: ...”的日志,因为显然查询没有得到文档。以下是查询的 buildArguments:buildArguments: where: [[listId, in, [IIAY56KF0mSCx1WwCXaV]]], orderBy: [], path: WISHLISTS 注意:Wishlists 是正确的路径,listId 也是正确的。 如果我将查询行更改为:final Query query = sharedCollection; 它只会吐出所有列表,所以理论上它应该可以工作。我认为whereIn 运算符存在一些问题。 有谁知道为什么这不起作用?我很乐意为您提供任何帮助。

【问题讨论】:

顺便说一句,query.buildArguments() 已被弃用并替换为query.paramaters 【参考方案1】:

whereIn 运算符使用记录在 here 中的相同查询,并且限制为 10 个相等子句。此处的解决方法是将列表 visibleListsIds 拆分为更小的块,类似于此 Stack Overflow post 中提到的内容。

【讨论】:

以上是关于Flutter Cloud Firestore whereIn 子句的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Firestore 连接我的 Flutter Windows 应用

Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web

Flutter:cloud_firestore 的构建错误:高于版本“0.7.4”

Flutter cloud_firestore 系统日期对象的设置/警告

Flutter Firestore [cloud_firestore/not-found] 找不到某些请求的文档

在 Flutter 中使用 Cloud Firestore 创建无限列表