我有这样的id列表;
List<dynamic> saveIDList = [];
值在此列表中,根据用户保存的id进行更改。
我尝试显示用户保存的帖子。所以我创建了一个这样的查询;
Query saveIDRef = _firestore
.collectionGroup("Posts")
.where("postID", whereIn: saveIDList);
创建此查询后,我在流生成器中调用saveIDRef。到目前为止,我的代码没有问题,它工作正常,但当saveIDlist的长度超过10时,我会收到警告。
我不可能更改我的数据库表单或查询saveIDList的方式,我该如何解决这个问题?
我尝试了不同的解决方案,但都没用。
例如,我创建这样的区块列表;
var chunks = [];
for (var i = 0; i < saveIDList.length; i += 10) {
chunks.add(saveIDList.sublist(
i, i + 10 > saveIDList.length ? saveIDList.length : i + 10));
}
我在saveIDList中分离了值,然后我在where中使用了这样的块in查询;
Query saveIDRef = _firestore
.collectionGroup("Posts")
.where("postID", whereIn: chunks);
但这也没用。当我像这样查询块列表时;
Query saveIDRef = _firestore
.collectionGroup("Posts")
.where("postID", whereIn: chunks[0]);
它是有效的。但我想查询区块列表中的所有元素,而不是区块列表中唯一的第一个元素。当我把这段代码放入for循环时,我会得到一个错误,即where in查询不能多次使用。
正如Firebase文档中关于Cloud Firestore中的简单查询和复合查询所述,逻辑查询存在一些限制:
Cloud Firestore为逻辑
OR
查询提供了有限的支持。in
和array-contains-any
运算符在单个字段上支持多达10个相等(==
(或array-contains
条件的逻辑OR
。对于其他情况,请为每个OR条件创建一个单独的查询,并在应用程序中合并查询结果。
因此,一个可能的解决方案是创建列表的块,并按照您的尝试分别查询这些块。例如,您可以使用List对象的List-subList方法来创建这些子列表或块。