Definição
Novidades na versão 8.3.
Sintaxe
$hexHash tem a seguinte sintaxe:
{ $hexHash: { input: <expression>, algorithm: <string> } }
Comportamento
$hexHash retorna uma string hexadecimal maiúscula. O comprimento da saída depende do algoritmo:
Algoritmo | Comprimento de saída (caracteres) |
|---|---|
| 32 |
| 64 |
| 16 |
Se input resolver para null ou indefinido, ou se referir a um campo ausente, $hexHash retornará null.
Se input for resolvido para um tipo diferente de uma string UTF-8 ou BinData, $hexHash retornará um erro.
Se algorithm não for um dos valores aceitos, $hexHash retornará um erro.
Importante
O MD5 não é um algoritmo criptograficamente seguro e não é adequado para aplicativos sensíveis à segurança. Se você estiver fazendo hash de dados confidenciais, use "sha256" em vez disso.
MD5 também está desabilitado no modo FIPS. Se sua implantação for executada com o modo FIPS ativado, utilize "sha256" ou "xxh64".
Exemplos
Os exemplos a seguir usam uma coleção chamada files com este document:
db.files.insertMany( [ { _id: 1, filename: "report.pdf" } ] )
Hash de um valor de campo
O exemplo seguinte calcula o hash hexadecimal SHA-256 do campo filename :
db.files.aggregate( [ { $project: { filename: 1, hexHash: { $hexHash: { input: "$filename", algorithm: "sha256" } } } } ] )
[ { _id: 1, filename: 'report.pdf', hexHash: '6466E450A16B77B865C5829D6B6C56D9F892956475642DBEB9CCC4340FE01B15' } ]
O hexHash campo contém o hash SHA-256 como uma string hexadecimal de 64caracteres em maiúsculas. Para usar um algoritmo diferente, altere o valor algorithm. Por exemplo, "xxh64" produz uma string de 16caracteres.
input nulo ou ausente
Se input for null ou input se referir a um campo ausente, $hexHash retornará null:
db.aggregate( [ { $documents: [ { val: null }, {} ] }, { $project: { hexHash: { $hexHash: { input: "$val", algorithm: "sha256" } } } } ] )
[ { hexHash: null }, { hexHash: null } ]