惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 司徒正美
Last Week in AI
Last Week in AI
爱范儿
爱范儿
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
量子位
V
V2EX
博客园 - 叶小钗
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
一日一技 | 巧用公式实现 Notion 数据库去重 - 少数派
2024-03-11 · via 少数派

在已经掌握了基本的 Notion 数据库功能后,随着实际项目的应用,你可能会产生更多的困惑,诸如字段内容查重、多级标签自动匹配等。本文旨在分享我的使用过程中想要实现的功能与解决方案,也许不是最优的,如你有更便捷的技巧或者其他思路,也欢迎在评论区一起研讨!

查重的使用场景

查重作为数据库构建的一项基本功能,是排除重复信息干扰、确保唯一性数据准确性的校验手段。而若能做到在特定数据有重复时自动警告并执行特定操作,将极大地提升用户体验。这里我举几个例子:

  1. 过滤掉机器人复制粘贴式的批量评论
  2. 标注出同一个人的多次领奖记录
  3. 给文章的分词数据按照重复次数排序以便制作词云
  4. 监测在短时间内发生多笔相同金额和商家的消费

完善的查重机制能节省大量人工判断的成本,并且在第一时间获知结论。如果这正好符合你的需求,且你正在使用 Notion 数据库来管理数据,那么不妨继续往下看吧~

查重功能的实现

Notion 数据库中的每一行(页面)有着天然的独立性,即便行与行之间共享着统一的字段,但数据库的架构决定了他们之间并不能直接实现跨行的信息访问,目前唯一的方式是通过 Relation 字段来解决。如果你已经掌握了数据库的基本功能,想必你应该了解过 Sub-item 这个特性:通过 Relation 字段链接数据库自己,就可以依照 Parent-item(父级)和 Child-item(子级)来构建带有指向性的跨行信息访问。那么当你希望上述的两个字段能基于其他字段的内容来 「智能」选择所需链接的页面时,单凭 Relation 字段本身就无能为力了。因为 Relation 字段的内容输入方式重度依赖手动选择,对于想要实现高度自动化的数据库来说无疑是需要另辟蹊径的。

在此之前,我非常推荐少数派与 @二一的笔记 联合推出的《Notion All in One:大家高能效率系统》。其中深入浅出地讲解了 Notion 丰富的能力,由于本文会涉及一定的数据库函数编辑,没有基础的小伙伴或能在这篇终极指南中受益良多。

回到正题,通常来说,我们会希望「智能选择」的范围是当前数据库的所有页面,但由于将每一页关联上其他所有页的手动成本过高,我们需要一个自动化的「中转数据库」来代为处理。这里我将以「玩家IP地址查重」为案例来演示。

一对一查重

基于兴趣,我目前在一个非营利性的游戏服务器运营团队中任职。在调查和把控对游戏社区有害的玩家时,我们常常需要甄别该玩家是否有其他小号,以便于我们在封禁该账号的时候也能「照顾」到他的其他「马甲」。IP地址可以展示玩家所在位置的大致区域,由于我们的玩家群体遍及全球,相同IP地址的情况少之又少,所以我们选择通过它来辅助决策。

如上图所示,现在我们有三名玩家以及他们各自对应的 IP 地址,我们的目的是让 查重 字段展示出有着相同 IP 地址的其他玩家的 ID。

构建「中转数据库」

接下来,新建一个数据库,并添加一个 Relation 字段,关联到上文中这个玩家数据库,然后先手动链接到这三名玩家。

记得要将 Show on 玩家数据库 的开关打开!

回到玩家数据库,这时我们就能看到每一名玩家在新出现的 Relation 字段里都与数据中转库中的同一页关联上了。

模板与自动关联

现在,我们需要让后续新添加的玩家自动关联到同一个数据中转页面,所以我们需要利用数据库的模板功能。

在玩家数据库新建一个模板,并且设置好 数据中转库 字段关联的页面。退出模板编辑,并将改模板设置为默认模板。

利用 Formula 执行查重

最后一步,同时也是对没有代码或者 Excel 函数基础的读者最难的一步,就是编辑 Formula 字段了。

首先,我们需要判断 IP地址 为空的情况,在此情况下我们也将 查重 留空。代码结构如下图。

其次,我们需要通过 中转数据库 字段中链接的页面(是第一个页面同时也是唯一一个页面,因此得使用 .first() 或者 .last() 等函数来获取到该页面,而不是含有该页面的页面列表)来间接访问玩家列表。代码结构如下图。

下一步,我们要对获取到的玩家列表使用 .filter() 进行筛选。筛选条件其一是:IP地址相同;其二是:排除掉玩家自身。如下图。

结合我们最开始对于留空情况的考虑,整个函数结构如下图。

现在数据库就能依托函数自动甄别重复的 IP 地址,并将重复的玩家 ID 列出来(如果有多名玩家的 IP 地址相同,也会一并列出来)。

一对多查重

然而,实际的使用过程中就会发现,一名玩家可能会使用多个不同 IP 地址登录服务器,也就有了一对多查重的需求。现在,我们需要新增一个字段 IP地址集合 用来存放该玩家所有使用过的 IP 地址,并按照由新到旧排列(该字段会由 Bot 从游戏服务器内抓取内容并通过 Notion API 导入)。

多行文本处理

同时,我们可以把 IP地址 修改为 Fomula 字段,让其能够自动摘选 IP地址合集 中的第一行内容(最近使用的 IP 地址)。函数如下图。

我们也更新一下示例数据,这样等会儿就能看出更明显的差异。

分别映射与逻辑判断

接下来回到 查重 函数字段,我们需要让每名玩家的 IP 地址与所有玩家的 IP 地址列表一一进行比对,进而充分考虑到每一种重复的可能性。这里我们会对 .split() 之后的每一条 IP 地址进行比较,并且一旦有任意一个相同的情况就应该整体返回 true

通过上述方法,最后我们会得到如下图所示的结果。

当我们利用 Notion API 完成数据的导入后,由 Notion 自己完成部分运算并借由 Gallery View 或者 Board View 展示出来,就起到了类似数据仪表盘的作用。在这之上,继续使用 Automations 来监听「查重的结果」就可以通过 Slack 等通讯平台向管理者发出提醒。

用类似数据仪表盘的形式展示查重结果

诚然,这里我们仅仅是用每名玩家的最近 IP 地址与所有出现过的 IP 地址比较,对于 「两名玩家曾经使用过同一个 IP 地址」这种情况是无法体现出来的,这个就留给读者自行思考了。

拓展与思考

由于 Notion Formula 并未提供直接跨行访问的函数,我目前能想到的就是通过中转数据库的方式来实现。除了上文中提到的「查重」功能之外,也适用于更多需要自动化处理来辨别数据库内的其他页面信息的情况。

日期字段匹配与快速翻页

如果你有日记、工作纪要的需求,并且经常反复翻看的话,那么这项功能应该适合你。同样是利用一个中转数据库,我们这次让「日记」数据库可以间接跨行访问,通过日期的排序和比对,就可以定位到「前一天的日记」和「后一天的日记」,效果如图。

让每一篇日记自动找到上一篇和下一篇,使翻页浏览体验更加顺滑。具体的实现方式如下。

如有需要,可以前往这里查看本文中提到的三个数据库页面~

结语

Notion 作为一款模块化的记录工具,因其丰富的数据交互能力而迅速蹿红,灵活的使用方式也招来了大批的模仿者,这其中有优有劣。但其云端笔记的特性,导致复杂的数据库运算往往会带来延迟和卡顿。优化函数算法的复杂度是一个解决方案,同时也希望 Notion 官方在数据运算和函数功能性上提供更多的可能性。

本文旨在介绍我常用的一种自动化信息展现方式,我只具备比较初级的编程能力,如有谬误或者更优的方案,欢迎于评论区指出~ 也欢迎提出你在 Notion 的使用过程中遇到的麻烦和痛点,也许我和其他读者能为你提供解决方案(也说不定会成为我下一期的选题)。

> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀