这个问题来自我的 Notion 系统课程的读者提问,现在我将回答分享于此。
首先,Notion 的数据库虽然有加载页数限制,但最少也需要有 10 条,因此就不能实现「只显示最后一条」的需求:
因此我们需要借助另一个数据库,以及一些函数公式的帮助。
基本思路如下:
- 将数据库 01 中的页面 A1、A2、A3、A4 等页面全部关联到数据库 02 中的页面 B(命名为最后更新条目」
- 在数据库 02 中创建一个 Formula 字段
- 在 Formula 字段中,用函数找出最后一个更新过的页面
1、创建默认模板
因为数据库 01 中的所有页面都需要关联到数据库 02 中的「最后更新条目」页面上,所以我们可以用默认模板,让这些页面在创建的时候就自动关联:
两个数据库的关联效果如下图所示:
使用 Formula 字段进行处理
在数据库 02 中创建一个 Formula 字段,并使用以下函数进行处理
Database 01.map(current.上次编辑时间).sort().reverse().slice(0,1).map(lets( lastTime,current, lastPage,Database 01.find(current.上次编辑时间==lastTime),lastPage ))
函数具体解析如下
- prop(“Database 01”) 这个函数用于获取名为 “Database 01” 的数据库中的所有页面。它返回一个包含所有页面的列表。
- map(current.prop(“上次编辑时间”)) map 函数用于遍历列表中的每个元素并对其应用某种操作。在这里,它从每个页面中提取 “上次编辑时间” 属性。结果是一个包含所有编辑时间的新列表。
- sort() sort 函数用于对列表进行排序。在这里,它将时间列表按照从早到晚的顺序排序。
- reverse() reverse 函数用于反转列表的顺序。在这里,它将排好序的时间列表反转,使其变成从最新到最旧的顺序。
- slice(0,1) slice 函数用于从列表中提取一部分元素。在这里,它只保留列表的第一个元素,也就是最新的编辑时间。
- map(lets(…)) 这里再次使用 map 函数,但这次是与 lets 函数结合使用。lets 函数允许我们在一个表达式中定义和使用临时变量。
- lastTime,current:将最新的编辑时间赋值给 lastTime 变量。
- lastPage,prop(“Database 01”).find(current.prop(“上次编辑时间”)==lastTime): 这里使用 find 函数在 “Database 01” 中查找上次编辑时间与 lastTime 相匹配的页面,并将其赋值给 lastPage 变量。
- lastPage:最后返回这个最新编辑的页面。
函数结果如下
如果切换到画廊模式,则可以将它嵌入到分栏排版中,获得相对更好看的样式
如果你希望更系统地了解 Notion Formula 的用法,可以阅读我的课程的这四篇文章:
- Notion 函数基础入门(一):用四则运算理解 Formula 的基本特性与用法
- Notion 函数基础入门(二):掌握更自由的打卡统计与日期间隔计算
- Notion 函数基础入门(三):复杂逻辑判断与自定义进度条
- 详细解读 Notion Formula 2.0