我正在尝试使用以下REST API调用REST API列表
https://myweb.sharepoint.com/teams/sites/subwebs/_api/web/lists/GetByTitle('MyList')/Items?
$top=1
&$orderby=ID
&$select=ID,FName,LName,Title
&$filter=Title eq 'Female'
我需要$ filter应该使用限制为$ top的记录数。如果未应用$ filter,$ top将起作用。
好吧,我的列表包含超过5000的项目。我在上面的网址获取GET请求时收到以下错误消息
{
"readyState": 4,
"responseText": "{\"odata.error\":{\"code\":\"-2147024860, Microsoft.SharePoint.SPQueryThrottledException\",\"message\":{\"lang\":\"en-US\",\"value\":\"The attempted operation is prohibited because it exceeds the list view threshold enforced by the administrator.\"}}}",
"responseJSON": {
"odata.error": {
"code": "-2147024860, Microsoft.SharePoint.SPQueryThrottledException",
"message": {
"lang": "en-US",
"value": "The attempted operation is prohibited because it exceeds the list view threshold enforced by the `enter code here`administrator."
}
}
},
"status": 500,
"statusText": "Internal Server Error"
}
答案 0 :(得分:3)
抛出异常Microsoft.SharePoint.SPQueryThrottledException
,因为$filter=Title eq 'Female'
查询导致遍历整个列表并检查每一行以查看它是否匹配。
根据MSDN:
列表视图阈值不仅仅适用于结果数 您的查询返回。相反,它限制了数据库的数量 可以访问的行以完成查询的执行 在内容数据库的行级别。
这就是$top
查询选项在此处不适用的原因。
避免此问题的一个选项是索引Title
字段。
转到List Settings -> Indexed Columns -> Create a new index -> select Title as a Primary Column
:
索引Title
字段后,以下查询应成功:
https://site/_api/web/lists/GetByTitle('<list title>')/Items?$top=1&$orderby=ID&$select=ID,Title&$filter=Title eq '<value>'
答案 1 :(得分:1)
我知道这听起来很明显,但是第一个过滤器必须返回5,000个或更少的项。 然后,您可以添加其他过滤器。在这种情况下,您可能不需要$ top参数。 例如:
https://site/_api/web/lists/GetByTitle('<List Title>')/Items?$filter=<Column Name> eq '<A value that you know returns 5,000 items or less>' and Title eq 'Female'
答案 2 :(得分:-1)
Promise.all([
rest call # 1 query : queryFilter:"ID lt '3000' and Title eq '000672'"
rest call # 2 query : queryFilter:"ID gt '2999' and Title eq '000672'"
.then( arr=> {
let fullArr = [...a[0],...a[1]]