如何修复命中 ObjectSet:PagingAboveConfiguredLimitNotAllowed 的 foundry 函数中的查询?

How to fix a query in functions within foundry which is hiting ObjectSet:PagingAboveConfiguredLimitNotAllowed?

我有数十亿行的留声机对象,我们正在通过对象集服务查询它 例如,我想获得某个城市的所有 DriverLicences。

        @Function()
        public getDriverLicences(city: string): ObjectSet<DriverLicences> {
            let drivers = Objects.search().DriverLicences().filter(row => row.city.exactMatch(city));
            return drivers ;
        }

我在尝试从 slate 中查询时遇到此错误:

ERROR 400: {"errorCode":"INVALID_ARGUMENT","errorName":"ObjectSet:PagingAboveConfiguredLimitNotAllowed","errorInstanceId":"0000-000","parameters":{}}

我知道我可能正在检索超过 100 000 个结果,但我需要所有结果,因为前面实现的逻辑是由另一个团队构建的复杂的平板仪表板,我们无法重构。

这里的问题是,特别是在 Slate <> Function 连接器中,有一个“翻译层”序列化对象集的内容,并提供一个实现 property:value 对的响应数据结构对于集合中的每个对象。

这显然不适用于大型对象集,在这种情况下,将如此多的数据扔到浏览器中可能会淹没分配给选项卡的资源。

从上下文来看,您可能正在将现有的 Slate 应用程序迁移到 Functions;在当前版本中,查询如何限制结果数 returned?肯定不会是return几十万个结果在前端做进一步处理吧? (如果是这样,那可能是 anti-pattern 考虑寻址)。

至于您当前可以探索的选项,您可以对对象集进行排序,然后将较小的限制指定为 return:

Objects.search().DriverLicences().filter(row => row.city.exactMatch(city)).orderBy(date_of_issue).take(100)

您可以在函数文档 参考 Ontology API 条目中找到更多详细信息:对象集 排序和限制 部分。

当 return 一个 ObjectSet 到 Slate 时,您甚至可以解决(当前)缺少分页的问题,方法是使用 属性 订购的最后一个值(即date_of_issue) 作为 后续 请求和 return 下一个 N 对象中的过滤器。

如果您需要一个 Slate table 或 HTML 小部件,它可以在一组结果上呈现,然后根据用户操作获取下一页。