深翻页文档
# 列表查询偏移量范围不能超过10000解决方案(深翻页)
背景:当客户调用查询接口获取大量数据时,查询条件中的offset会随着调用次数的不断增大,会导致查询时间过长且数据库压力过大影响到服务的正常运行。
接口返回结果:
{
"errorDescription": "offset 不能超过10000",
"errorMessage": "offset out of range 10000",
"errorCode": 10013
}
解决方案:
在查询条件"search_query_info" 中加入_id的排序( "orders": [ { "fieldName": "_id", "isAsc": true } ]),offset为0保持不变("offset": 0),且加入上一次查询结果中最后一条 _id的数值("filters": [ { "operator": "GT", "field_name": "_id", "field_values": [ "上一次查询结果中的最后一条数据的_id值" ] } ],),进行翻页查询。
例如:"search_query_info": { "limit": 5, "offset": 0, "filters": [ { "operator": "GT", "field_name": "_id", "field_values": [ "0329115a0d70455f9852bbcbbaf452e0" ] } ], "orders": [ { "fieldName": "_id", "isAsc": true } ]}
# 代码示例:
以查询客户列表为例,第一次查询:
入参:
{
"data": {
"dataObjectApiName": "AccountObj",
"find_explicit_total_num": false,
"search_query_info": {
"limit": 5,
"offset": 0,
"filters": [],
"orders": [
{
"fieldName": "_id",
"isAsc": true
}
],
"fieldProjection": [
"_id"
]
}
}
}
出参:
{
"traceId": "E-O.74164.1063-61c99d4033ca46c5",
"data": {
"dataList": [
{
"_id": "0039b47555cf4be98b8ff85d1ca70144"
},
{
"_id": "00d031875c924725b23355bbcff562e4"
},
{
"_id": "0154bfc178134deabf23e5cff7844622"
},
{
"_id": "01d92e8210cd4a2495fd893433ac285d"
},
{
"_id": "0329115a0d70455f9852bbcbbaf452e0"
}
],
"offset": 0,
"limit": 5,
"total": 0
},
"errorDescription": "success",
"errorMessage": "OK",
"errorCode": 0
}