定义
8.3版本新增。
语法
$hexHash 通过以下语法实现:
{ $hexHash: { input: <expression>, algorithm: <string> } }
字段 | 类型 | 说明 |
|---|---|---|
| 必需。要哈希的值。必须解析为有效的 UTF-8 字符串或 | |
| 字符串 | 必需。哈希算法。接受的值:
|
行为
$hexHash 返回一个大写的十六进制字符串。输出的长度取决于算法:
算法 | 输出长度(字符) |
|---|---|
| 32 |
| 64 |
| 16 |
如果 input 解析为 null 或未定义,或引用缺失字段,则 $hexHash 返回 null。
如果input 解析为 UTF-8 字符串或BinData 以外的类型,$hexHash 将返回错误。
如果 algorithm 不是接受的值之一,$hexHash 将返回错误。
重要
MD5 不是一种加密安全算法,不适合安全敏感的应用程序。如果您要对敏感数据进行哈希处理,请改用 "sha256"。
MD5 在 FIPS模式下也会被禁用。如果您的部署在启用 FIPS模式的情况下运行,请改用 "sha256" 或 "xxh64"。
示例
以下示例将名为 files 的集合与此文档一起使用:
db.files.insertMany( [ { _id: 1, filename: "report.pdf" } ] )
对字段值进行哈希处理
以下示例计算 filename字段的 SHA-256 十六进制哈希值:
db.files.aggregate( [ { $project: { filename: 1, hexHash: { $hexHash: { input: "$filename", algorithm: "sha256" } } } } ] )
[ { _id: 1, filename: 'report.pdf', hexHash: '6466E450A16B77B865C5829D6B6C56D9F892956475642DBEB9CCC4340FE01B15' } ]
hexHash字段包含 64 个字符的大写十六进制字符串形式的 SHA-256 哈希值。要使用不同的算法,请更改 algorithm 值。示例,"xxh64" 会生成一个 16 个字符的字符串。
输入 null 或缺失
如果 input 为 null 或 input 引用缺失字段,则 $hexHash 返回 null:
db.aggregate( [ { $documents: [ { val: null }, {} ] }, { $project: { hexHash: { $hexHash: { input: "$val", algorithm: "sha256" } } } } ] )
[ { hexHash: null }, { hexHash: null } ]