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

MongoDB是否提供生成64位字符串哈希的原生函数用于数据匿名?

MongoDB聚合管道中生成64位哈希值的原生方案

MongoDB在5.0及以上版本提供了原生的$hash聚合函数,可以直接生成64位哈希值用于数据匿名,无需自定义函数。以下是具体用法和注意事项:

一、使用原生$hash函数(推荐)

$hash支持多种哈希算法,其中fnv1a_64直接生成64位哈希值,返回结果为64位整数。

基础用法(生成整数型64位哈希)

{
  $project: {
    anonymizedField: {
      $hash: {
        input: "$yourStringField", // 要匿名的字符串字段
        algorithm: "fnv1a_64"
      }
    }
  }
}

转换为字符串形式(十六进制)

如果需要字符串格式的哈希值,可以配合$toString转换:

{
  $project: {
    anonymizedField: {
      $toString: {
        $hash: {
          input: "$yourStringField",
          algorithm: "fnv1a_64"
        }
      }
    }
  }
}

二、低版本MongoDB的替代方案(5.0以下)

如果你的MongoDB版本低于5.0,没有原生$hash函数,可以通过$function自定义JavaScript逻辑实现64位哈希,但性能不如原生函数。示例(FNV-1a 64位实现):

{
  $project: {
    anonymizedField: {
      $function: {
        body: function(str) {
          let hash = 0xcbf29ce484222325;
          const fnvPrime = 0x100000001b3;
          for (let i = 0; i < str.length; i++) {
            hash ^= str.charCodeAt(i);
            hash *= fnvPrime;
          }
          return hash.toString(16); // 返回十六进制字符串
        },
        args: ["$yourStringField"],
        lang: "js"
      }
    }
  }
}

注意事项

  • 优先选择原生$hash函数,避免JavaScript执行带来的性能损耗。
  • 确认你的MongoDB版本兼容性:$hash函数仅在5.0及以上版本可用。
  • 若使用murmur3_128算法(生成128位哈希),可以通过$substrBytes截取前8字节(64位),但fnv1a_64更直接。

内容的提问来源于stack exchange,提问作者Sébastien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:08:22