使用Notion API获取show_original类型Rollup的Select值时遇错求助
解决Notion Rollup属性(Select类型)的获取问题
出现Invalid relations found in rollup错误的原因是:notion.pages.properties.retrieve接口不适用于获取Rollup类型属性的具体值——Rollup属性依赖关联页面的数据,直接调用该接口会触发校验失败。
以下是两种正确获取Select类型Rollup值的方法:
方式一:直接从页面查询结果中提取
当你通过notion.pages.retrieve获取页面详情时,返回的page.properties里已经包含Rollup的计算结果,无需额外调用属性检索接口。示例代码如下:
const rollupName = 'foo'; const rollupProp = page.properties[rollupName].rollup; // 处理show_original函数对应的array类型Rollup结果 if (rollupProp.type === 'array') { const selectValues = rollupProp.array.map(item => { // 关联页面的属性类型为select,提取选项名称或ID if (item.type === 'select') { return item.select.name; // 如需选项ID可替换为item.select.id } return null; }).filter(val => val !== null); console.log(selectValues); }
方式二:通过数据库查询接口获取
如果页面属于某个数据库,可使用notion.databases.query接口定位目标页面后提取Rollup值:
const queryResult = await notion.databases.query({ database_id: '你的数据库ID', filter: { property: 'ID', // 或使用页面标题等唯一标识属性 rich_text: { equals: page.id // 若用标题则替换为页面标题文本 } } }); const targetPage = queryResult.results[0]; const rollupProp = targetPage.properties[rollupName].rollup; // 提取Select类型值 if (rollupProp.type === 'array') { const selectValues = rollupProp.array.map(item => item.select?.name).filter(Boolean); console.log(selectValues); }
关键注意事项
- Rollup属性的
type由其使用的函数决定,你当前用的show_original对应array类型,数组内每个元素匹配关联页面的Select属性结构。 - 避免使用
pages.properties.retrieve接口获取Rollup属性,该接口更适合处理文本、数字等不依赖关联数据的独立属性类型。
内容的提问来源于stack exchange,提问作者Mira
相关产品推荐
相关产品推荐

