定義
バージョン8.3の新機能。
構文
$hash の構文は次のとおりです。
{ $hash: { input: <expression>, algorithm: <string> } }
動作
input 値 | 結果 | ノート |
|---|---|---|
UTF-8 string | input は有効な UTF-8 string である必要があります。 | |
|
|
input が null または未定義に解決されるか、欠落しているフィールドを参照する場合、$hash は null を返します。
input が UTF-8 string または BinData 以外のタイプに解決される場合、$hash はエラーを返します。
algorithm が許容値の 1 つではない場合、$hash はエラーを返します。
重要
MD5 は暗号化された安全なアルゴリズムではないため、セキュリティに注意が必要なアプリケーションには適していません。機密データをハッシュしている場合は、代わりに "sha256" を使用します。
MD5 も FIPSモードでは無効になっています。配置が FIPSモードを有効にして実行されている場合は、代わりに "sha256" または "xxh64" を使用します。
例
次の例では、これらのdocumentを含む files という名前のコレクションを使用します。
db.files.insertMany( [ { _id: 1, filename: "report.pdf" }, { _id: 2, filename: "archive.zip" } ] )
フィールド値のハッシュ
次の例では、各 document の 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) } ]
リテラル string のハッシュ
次の例では、リテラルの string 値をハッシュします。
db.aggregate( [ { $documents: [ { val: "hello" } ] }, { $project: { _id: 0, hash: { $hash: { input: "$val", algorithm: "xxh64" } } } } ] )
[ { hash: Binary.createFromBase64('JseCfYifbaM=', 0) } ]
ハッシュ BinData
次の例では、binary データフィールドの 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
input が null であるか、 欠落しているフィールドを参照している場合、$hash は null を返します。
db.aggregate( [ { $documents: [ { val: null }, {} ] }, { $project: { hash: { $hash: { input: "$val", algorithm: "sha256" } } } } ] )
[ { hash: null }, { hash: null } ]