定义
8.3版本新增。
$hashBinData从 UTF-8 字符串或二进制数据生成并返回二进制哈希值 ()。在聚合管道中使用$hash来计算用于存储、验证或比较的二进制哈希值。要获取十六进制字符串而不是二进制数据,请使用$hexHash。
语法
$hash 通过以下语法实现:
{ $hash: { input: <expression>, algorithm: <string> } }
字段 | 类型 | 说明 |
|---|---|---|
| 必需。要计算哈希值的值。必须解析为有效的 UTF-8 字符串或 | |
| 字符串 | 必需。哈希算法。接受的值:
|
行为
如果 input 解析为 null 或未定义,或引用缺失字段,则 $hash 返回 null。
如果input 解析为 UTF-8 字符串或BinData 以外的类型,$hash 将返回错误。
如果 algorithm 不是接受的值之一,$hash 将返回错误。
重要
MD5 不是一种加密安全算法,不适合安全敏感的应用程序。如果您要对敏感数据进行哈希处理,请改用 "sha256"。
MD5 在 FIPS模式下也会被禁用。如果您的部署在启用 FIPS模式的情况下运行,请改用 "sha256" 或 "xxh64"。
示例
以下示例使用包含这些文档的名为 files 的集合:
db.files.insertMany( [ { _id: 1, filename: "report.pdf" }, { _id: 2, filename: "archive.zip" } ] )
对字段值进行哈希处理
以下示例计算每个文档的 filename字段的 SHA-256 哈希值:
db.files.aggregate( [ { $project: { filename: 1, hash: { $hash: { input: "$filename", algorithm: "sha256" } } } } ] )
[ { _id: 1, filename: 'report.pdf', hash: Binary.createFromBase64('ZGbkUKFrd7hlxYKda2xW2fiSlWR1ZC2+uczENA/gGxU=', 0) }, { _id: 2, filename: 'archive.zip', hash: Binary.createFromBase64('jsO6p+AcJW/43CrXux9Tpmq+hHLmCKPmqJjcARAsmVA=', 0) } ]
对文字字符串进行哈希处理
以下示例对文字字符串值进行哈希处理:
db.aggregate( [ { $documents: [ { val: "hello" } ] }, { $project: { _id: 0, hash: { $hash: { input: "$val", algorithm: "xxh64" } } } } ] )
[ { hash: Binary.createFromBase64('JseCfYifbaM=', 0) } ]
哈希 BinData
以下示例计算二进制数据字段的 SHA-256 哈希值:
db.binaries.insertMany( [ { _id: 1, data: new BinData(0, "aGVsbG8=") } ] )
db.binaries.aggregate( [ { $project: { hash: { $hash: { input: "$data", algorithm: "sha256" } } } } ] )
[ { _id: 1, hash: Binary.createFromBase64('LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=', 0) } ]
输入 null 或缺失
如果 input 为 null 或指向缺失字段,则 $hash 返回 null:
db.aggregate( [ { $documents: [ { val: null }, {} ] }, { $project: { hash: { $hash: { input: "$val", algorithm: "sha256" } } } } ] )
[ { hash: null }, { hash: null } ]