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 系统日期对象的设置/警告