You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB 6.0的mongosh中默认使用旧版UUID?

解决方案:让MongoDB 6.0 mongosh默认生成旧版UUID(BSON subtype 3)

mongosh没有原生配置项让UUID()默认生成subtype3的旧版UUID,但可以通过自定义全局函数覆盖默认行为的方式实现,完全适配同事的使用习惯,步骤如下:

1. 编写自定义UUID函数

创建一个替换默认UUID()的函数,解析输入的UUID字符串(支持带连字符/不带连字符格式),生成符合要求的BinData(3, ...):

globalThis.UUID = function(uuidStr) {
  // 移除UUID字符串中的连字符
  const cleanedUuid = uuidStr.replace(/-/g, '');
  // 将十六进制字符串转换为字节数组
  const byteArray = [];
  for (let i = 0; i < cleanedUuid.length; i += 2) {
    byteArray.push(parseInt(cleanedUuid.substr(i, 2), 16));
  }
  // 转换为Base64编码,生成subtype3的BinData
  return BinData(3, btoa(String.fromCharCode(...byteArray)));
};

这个函数的行为和MongoDB 5.0经典shell的旧版UUID生成逻辑一致,确保生成的BinData和pymongo创建的subtype3 UUID兼容。

2. 配置mongosh自动加载该函数

将上述函数写入mongosh的启动配置文件,实现每次启动自动生效:

  • Linux/macOS:编辑~/.mongoshrc.js文件(如果不存在则新建),粘贴函数代码后保存。
  • Windows:编辑%USERPROFILE%\.mongoshrc.js文件(同样,不存在则新建),粘贴函数代码后保存。

3. 验证效果

重启mongosh后,调用UUID()将默认生成subtype3的旧版UUID:

> UUID("c19f6bdf-e680-4059-8b9a-a19bb879abb3")
BinData(3,"wZ9r3+aAQFmLmqGbuHmrsw==")
> UUID("c19f6bdfe68040598b9aa19bb879abb3")
BinData(3,"wZ9r3+aAQFmLmqGbuHmrsw==")

临时使用新版UUID

如果需要临时生成subtype4的新版UUID,直接调用mongosh原生的BSON.UUID()即可:

> BSON.UUID("c19f6bdf-e680-4059-8b9a-a19bb879abb3")
UUID("c19f6bdf-e680-4059-8b9a-a19bb879abb3")

这种方案既满足了同事的使用习惯,避免误生成新版UUID破坏逻辑,又保留了过渡期间灵活切换UUID类型的能力,完全适配你的迁移需求。

内容的提问来源于stack exchange,提问作者Messa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:05:42