Flutter Firebase where IN 10极限问题



我有这样的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查询提供了有限的支持。inarray-contains-any运算符在单个字段上支持多达10个相等(==(或array-contains条件的逻辑OR。对于其他情况,请为每个OR条件创建一个单独的查询,并在应用程序中合并查询结果。

因此,一个可能的解决方案是创建列表的块,并按照您的尝试分别查询这些块。例如,您可以使用List对象的List-subList方法来创建这些子列表或块。

最新更新