Google app engine “fetch_page()”与“filter()”一起使用时,是否不能保证最小的结果量?

Google app engine “fetch_page()”与“filter()”一起使用时,是否不能保证最小的结果量?,google-app-engine,google-cloud-datastore,app-engine-ndb,Google App Engine,Google Cloud Datastore,App Engine Ndb,在这方面,我们有: 看起来,在使用过滤器和获取页面时,它不会返回最少的结果,即使有更多的结果实际上与查询匹配。真的是这样吗 fetch\u page是否可能导致零结果,即使从返回的光标继续,我们最终会找到更多结果 如果是这样的话,我需要最少的结果,这是否意味着我必须“手动”累积结果,直到达到所需的条目数?或者NDB中是否有一项功能允许我“自动”累积结果,直到我获得某个最小数量的结果 下面是我正在使用的有问题的代码: results, cursor, more = (cls.query(keys_

在这方面,我们有:

看起来,在使用
过滤器
获取页面
时,它不会返回最少的结果,即使有更多的结果实际上与查询匹配。真的是这样吗

fetch\u page
是否可能导致零结果,即使从返回的
光标继续,我们最终会找到更多结果

如果是这样的话,我需要最少的结果,这是否意味着我必须“手动”累积结果,直到达到所需的条目数?或者NDB中是否有一项功能允许我“自动”累积结果,直到我获得某个最小数量的结果

下面是我正在使用的有问题的代码:

results, cursor, more = (cls.query(keys_only=True)
                         .filter(cls.user_id == user_id)
                         .filter(cls.expired == False)
                         .order(ordering)
                         .fetch_page(batch_size, start_cursor=start_cursor))

在我的测试环境中,保存在数据库中的大多数结果与过滤器不匹配,但仍有相当多的结果与过滤器不匹配,并且不显示。从查询开始,它要么使用特定的复合索引,要么遵循合并连接算法。有关合并联接查询的性能,请参阅

如该文档中所述,查询可能匹配RPC截止日期中小于
batch\u size
的结果,因此返回时不带
batch\u size
结果

如果RPC成功返回且结果为零,则更多结果应为false。如果RPC找不到任何结果,但未完成扫描,则可能返回错误

如果您确实需要
batch\u size
结果,您应该通过多次发出查询并在每次调用时更新start\u游标来验证您是否得到了
batch\u size
结果。您还应该尽可能使用一些索引为您的查询提供服务

上的完整文档应该对您有所帮助

results, cursor, more = (cls.query(keys_only=True)
                         .filter(cls.user_id == user_id)
                         .filter(cls.expired == False)
                         .order(ordering)
                         .fetch_page(batch_size, start_cursor=start_cursor))