这个问题来自我的 Notion 系统课程的读者提问,现在我将回答分享于此。

首先,Notion 的数据库虽然有加载页数限制,但最少也需要有 10 条,因此就不能实现「只显示最后一条」的需求:

Notion20240907数据库只显示最近一条更新007380@2x.png

因此我们需要借助另一个数据库,以及一些函数公式的帮助。

基本思路如下:

  1. 将数据库 01 中的页面 A1、A2、A3、A4 等页面全部关联到数据库 02 中的页面 B(命名为最后更新条目」
  2. 在数据库 02 中创建一个 Formula 字段
  3. 在 Formula 字段中,用函数找出最后一个更新过的页面

1、创建默认模板

因为数据库 01 中的所有页面都需要关联到数据库 02 中的「最后更新条目」页面上,所以我们可以用默认模板,让这些页面在创建的时候就自动关联:

Notion20240907数据库只显示最近一条更新007382@2x.png

两个数据库的关联效果如下图所示:

20240907562.png

使用 Formula 字段进行处理

在数据库 02 中创建一个 Formula 字段,并使用以下函数进行处理

1
Database 01.map(current.上次编辑时间).sort().reverse().slice(0,1).map(lets( lastTime,current, lastPage,Database 01.find(current.上次编辑时间==lastTime),lastPage ))

函数具体解析如下

  1. prop(“Database 01”) 这个函数用于获取名为 “Database 01” 的数据库中的所有页面。它返回一个包含所有页面的列表。
  2. map(current.prop(“上次编辑时间”)) map 函数用于遍历列表中的每个元素并对其应用某种操作。在这里,它从每个页面中提取 “上次编辑时间” 属性。结果是一个包含所有编辑时间的新列表。
  3. sort() sort 函数用于对列表进行排序。在这里,它将时间列表按照从早到晚的顺序排序。
  4. reverse() reverse 函数用于反转列表的顺序。在这里,它将排好序的时间列表反转,使其变成从最新到最旧的顺序。
  5. slice(0,1) slice 函数用于从列表中提取一部分元素。在这里,它只保留列表的第一个元素,也就是最新的编辑时间。
  6. map(lets(…)) 这里再次使用 map 函数,但这次是与 lets 函数结合使用。lets 函数允许我们在一个表达式中定义和使用临时变量。
    • lastTime,current:将最新的编辑时间赋值给 lastTime 变量。
    • lastPage,prop(“Database 01”).find(current.prop(“上次编辑时间”)==lastTime): 这里使用 find 函数在 “Database 01” 中查找上次编辑时间与 lastTime 相匹配的页面,并将其赋值给 lastPage 变量。
    • lastPage:最后返回这个最新编辑的页面。

函数结果如下

Notion20240907数据库只显示最近一条更新007387.gif

如果切换到画廊模式,则可以将它嵌入到分栏排版中,获得相对更好看的样式

Notion20240907数据库只显示最近一条更新007389@2x.png

如果你希望更系统地了解 Notion Formula 的用法,可以阅读我的课程的这四篇文章:

你也可以在 这里 获取这段函数