使用PnPjs筛选SharePoint文档库文件名时遇错误求助
问题原因分析
- 文档库中显示名称为「Name」的列,内部名称实际是
FileLeafRef,直接用Name会报错列不存在。 - 使用
FileLeafRef筛选时触发列表视图阈值,是因为该列未创建索引,当文档库条目数超过默认阈值(5000条)时,未索引列的筛选会遍历所有条目,触发系统限制。
具体解决步骤
1. 为FileLeafRef列创建索引
这是解决阈值问题的核心方案:
- 进入「Medicine files」文档库的设置页面
- 点击「列」,找到显示名称为「名称」的列(对应内部名
FileLeafRef) - 编辑该列,勾选「为此列创建索引」,保存设置
- 等待索引创建完成(大列表可能需要几分钟)
2. 验证并修正查询代码
确认使用正确的内部列名,修正后的PnPjs代码:
// 注意asc需要导入:import { asc } from "@pnp/sp/items"; await sp.web.lists.getByTitle("Medicine files") .items.filter("FileLeafRef eq 'test.pdf'") .expand("File") .orderBy("Created", asc)();
3. 备选方案:使用搜索API绕过阈值限制
如果无法创建索引(比如列表条目远超阈值且无法临时缩减),可以改用SharePoint搜索API,不受列表视图阈值约束:
const searchResults = await sp.search({ Querytext: `Path:https://your-tenant.sharepoint.com/sites/your-site/Medicine%20files FileLeafRef:test.pdf`, SelectProperties: ["Created", "FileRef", "FileLeafRef"], RowLimit: 100 }); // 处理搜索结果 if (searchResults.PrimarySearchResults.length > 0) { const files = searchResults.PrimarySearchResults.map(item => ({ name: item.FileLeafRef, created: item.Created, url: item.FileRef })); console.log(files); }
替换
Path中的实际站点和文档库路径,也可以用ListId:{你的文档库ID}来限定范围。
4. 确认列的内部名称(排查用)
如果不确定列的内部名称,可通过以下代码获取所有列的显示名和内部名:
const fields = await sp.web.lists.getByTitle("Medicine files") .fields.select("InternalName", "Title")(); fields.forEach(field => { console.log(`显示名: ${field.Title} | 内部名: ${field.InternalName}`); });
内容的提问来源于stack exchange,提问作者Mehri Golchin
相关产品推荐
相关产品推荐

