【问题标题】:Flutter Cloud Firestore whereIn clauseFlutter Cloud Firestore whereIn 子句
【发布时间】: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。

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多