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

推荐订阅源

V
Visual Studio Blog
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
月光博客
月光博客
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
NISL@THU
NISL@THU
爱范儿
爱范儿
S
Securelist
博客园 - 叶小钗
C
CERT Recently Published Vulnerability Notes
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
D
DataBreaches.Net
G
GRAHAM CLULEY
P
Proofpoint News Feed
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
博客园 - 【当耐特】
H
Help Net Security
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss

辰渊尘站

Subconverter 太臃肿?PHP 版轻量化替代来了! - 辰渊尘站 Astro框架Fuwari主题侧边栏添加Umami访问统计 Astro框架Fuwari主题侧边栏添加Umami访问统计 为Fuwari框架适配友链状态显示 为Fuwari框架适配友链状态显示 免费领取网易云音乐7天会员 免费领取网易云音乐7天会员 小米MiMo Token Plan免费送辣! 小米MiMo Token Plan免费送辣! Astro框架Fuwari主题实现仿hexo-abbrlink功能 Astro框架Fuwari主题实现仿hexo-abbrlink功能 观《鬼灭之刃:无限城篇 第一章 猗窝座再袭》首映有感 观《鬼灭之刃:无限城篇 第一章 猗窝座再袭》首映有感 为你anzhiyu主题的Twikoo评论系统恢复预览按钮 为你anzhiyu主题的Twikoo评论系统恢复预览按钮 山东泰安泰山游记:煌煌泰山景,谦谦君子风 山东泰安泰山游记:煌煌泰山景,谦谦君子风 安知鱼主题:修复背景图修改引发的深色模式可读性问题 安知鱼主题:修复背景图修改引发的深色模式可读性问题 安知鱼主题实现友链状态前端显示 安知鱼主题实现友链状态前端显示 我敲!优选DNS牛大了 我敲!优选DNS牛大了 安知鱼主题侧边栏添加无聊湾 安知鱼主题侧边栏添加无聊湾 从零开始使用Hexo框架搭建属于你的博客(一)环境准备篇 从零开始使用Hexo框架搭建属于你的博客(一)环境准备篇 记录下Hexo博客从本地构建迁移到Netlify,AI API Key 泄露问题与解决方案记录 记录下Hexo博客从本地构建迁移到Netlify,AI API Key 泄露问题与解决方案记录 云服务器宝塔部署Twikoo博客评论系统 云服务器宝塔部署Twikoo博客评论系统 手把手教你在Linux系统下部署MCSManager并搭建一个MC服务器 手把手教你在Linux系统下部署MCSManager并搭建一个MC服务器 为你的Twikoo添加酷安表情包 为你的Twikoo添加酷安表情包 记录一次博客评论迁移过程 记一次花嫁联名借记卡申领过程 记一次花嫁联名借记卡申领过程 为使用anzhiyu主题的博客加上十年之约进度条 为使用anzhiyu主题的博客加上十年之约进度条 有关建站一个月以来的一点点感想和后续计划 有关建站一个月以来的一点点感想和后续计划 这可能是iOS自签的版本答案,二合一LiveContainer教程来辣! 这可能是iOS自签的版本答案,二合一LiveContainer教程来辣! iOS侧载新选择!SideStore+LiveContainer,纯净无广,无限安装软件!!! iOS侧载新选择!SideStore+LiveContainer,纯净无广,无限安装软件!!! 从零开始使用Hexo框架搭建属于你的博客(零)准备篇 从零开始使用Hexo框架搭建属于你的博客(零)准备篇 Arch Linux+Hyprland从安装到使用只需这一篇(保姆级喂饭超全教程) Arch Linux+Hyprland从安装到使用只需这一篇(保姆级喂饭超全教程) - 辰渊尘站 恭喜你找到了本站的第一篇文档 恭喜你找到了本站的第一篇文档 - 辰渊尘站
记录一次博客评论迁移过程
辰渊尘 · 2025-08-20 · via 辰渊尘站

问题背景#

我使用abbrlink插件默认参数设置发现有概率为文章生成纯数字链接,例如abbrlink: 114514,然后链接转二维码的api就这样活生生炸了,我很纳闷,一般来说url不应该出现此问题,但事实就是如此,既来之则安知,修!

abbrlink是Hexo的一个插件,用来给文章生成唯一ID(短链),这样文章的链接就不会随标题变化而改变。

于是按照ai说的把abbrlink插件配置修改了下:

- permalink: posts/:abbrlink/

+ permalink: posts/p:abbrlink/

# 一个 Hexo 插件,用于根据帖子正面的标题和数据生成静态帖子链接。

# https://github.com/rozbo/hexo-abbrlink

# abbrlink config

abbrlink:

- alg: crc16 #support crc16(default) and crc32

+ alg: crc32 #support crc16(default) and crc32

rep: hex #support dec(default) and hex

drafts: false #(true)处理草稿,(false)不处理草稿。false(默认值)

# 从目录树生成类别

# 深度:要生成的目录树的最大深度应大于0

auto_category:

enable: true #true(default)

depth: #3(default)

over_write: false

auto_title: false #启用自动标题,可以按路径自动填充标题

auto_date: false #启用自动日期,它可以自动填写日期的时间今天

force: false #启用强制模式,在这种模式下,插件将忽略缓存,并为每个帖子计算abbrlink,即使它已经有了abbrlink。

这样如此链接就不可能是纯数字,ai还说老文章不受影响,我就放心改完上传了。让我没想到的是它会把老文章一起改了,进而引发了这场惨案。

问题暴露#

我一开始并没有发现,高高兴兴把昼夜切换按钮的bug修了,后面测试移动端排版的时候瞥了一眼评论区。我擦!我评论咋全没了。马上开始排查,发现最终罪魁就是 abbrlink 的配置改动导致旧链接结构不一致,评论指向的旧 /posts/7e9 变成了 /posts/p7e9,页面上匹配不到原来的评论条目。

解决思路#

于是我用Navicat连上了MongoDB,手动修改。

WARNING

在开始任何批量替换前,务必备份数据库!!!不要学我!

# 备份整个数据库

mongodump --uri="mongodb://<user>:<pass>@<host>:<port>/<dbname>" --out ./backup_2025-08-20

# 恢复示例

mongorestore --uri="mongodb://<user>:<pass>@<host>:<port>/" ./backup_2025-08-20

之后觉得效率太低了,去学习了下SQL查询的语法(技能+1)

写了个简易替换脚本:

var oldSlug = "7e9"; // 替换前

var newSlug = "p7e9"; // 替换后

db.comment.updateMany(

{

$or: [

{ url: { $regex: "/posts/" + oldSlug } },

{ href: { $regex: "/posts/" + oldSlug } }

]

},

[

{

$set: {

url: { $replaceOne: { input: "$url", find: "/posts/" + oldSlug, replacement: "/posts/" + newSlug } },

href: { $replaceOne: { input: "$href", find: "/posts/" + oldSlug, replacement: "/posts/" + newSlug } }

}

}

]

)

替换效率更高一点,同一篇文档下所有评论都可以一键替换,还好我文章发的不多,除去学习发现时间,替换就花了5分钟的样子,完美解决。

经验总结#

  • 先备份,再动手(重要且不重复)。
  • 在生产库上做批量修改前,先在测试或少量样本上验证。
  • 修改链接/路由时要意识到可能影响历史数据(评论、外链、SEO 等),最好在改动前做影响评估与回滚计划。

数据无价心莫轻,链接改动慢思量,评论全失才明白,操作谨慎方安康。