Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Operaciones compatibles para Queryable Encryption

Esta página documenta los tipos de datos específicos, comandos, operadores de consulta, operadores de actualización, etapas de agregación y expresiones de agregación soportados para controladores compatibles con Queryable Encryption. Describe el comportamiento para operaciones que emplean cifrado automático y operaciones con cifrado explícito.

Nota

Característica de la empresa

El cifrado automático está disponible en MongoDB Enterprise y MongoDB Atlas

MongoDB almacena los campos cifrados Queryable Encryption como un BinData blob. Las operaciones de lectura y escritura realizadas sobre el valor cifrado BinData pueden tener un comportamiento inesperado o incorrecto en comparación con la realización de esa misma operación sobre el valor descifrado. Algunas operaciones tienen compatibilidad estricta con tipos BSON, y ejecutarlas contra un valor BinData devuelve un error.

Los drivers oficiales compatibles con Queryable Encryption analizan las operaciones de lectura y escritura para operadores o expresiones que no admiten valores BinData.

Queryable Encryption permite configurar el tipo de consulta de igualdad queryType: "equality" para todos los tipos BSON excepto los siguientes:

  • array

  • decimalDecimal (IEEE 754 Decimal128)

  • double: double (IEEE 754 Binario64)

  • object

Queryable Encryption admite configurar el tipo de consulta por rango queryType: "range" para los siguientes BSON types:

  • date:: Fecha y hora UTC (Int64)

  • decimalDecimal (IEEE 754 Decimal128)

  • double: double (IEEE 754 Binario64)

  • int: entero de 32bits

  • long: entero de 64bits

Nota

El tipo de query es la configuración del índice cifrado, no el conjunto de operadores del query por sí mismo. En particular, decimal y double son compatibles con el tipo de consulta de rango queryType: "range", y MongoDB evalúa las consultas de igualdad en estos campos utilizando el índice de rango.

  • Queryable Encryption no admite operaciones de actualización o eliminación de varios documentos. db.collection.updateMany() y db.collection.bulkWrite() con más de una actualización u operación de eliminación no son compatibles.

  • Queryable Encryption limita los argumentos db.collection.findAndModify().

    • fields no está permitido

    • new debe ser falso

  • Al realizar una operación de upsert, cualquier campo cifrado en el filtro se excluye de la inserción.

Los drivers compatibles con Queryable Encryption soportan el cifrado automático con los siguientes comandos:

Para cualquier comando admitido, los controladores devuelven un error si el comando utiliza un operador, una etapa de agregación o una expresión de agregación no compatible. Para ver una lista completa de los operadores, etapas y expresiones compatibles, consulta las siguientes secciones:

Los siguientes comandos no requieren cifrado automático. Los drivers oficiales configurados para el cifrado automático pasan estos comandos directamente al mongod:

Emitir cualquier otro comando a través de un driver compatible configurado para cifrado automático genera un error.

[1] Si bien el cifrado automático no cifra el comando getMore, la respuesta al comando puede contener valores de campo cifrados.
  • Las aplicaciones configuradas con las opciones correctas de Queryable Encryption descifran automáticamente esos valores.
  • Las aplicaciones que no tienen las opciones de cifrado correctas ven los valores cifrados.

Los drivers configurados para cifrado automático admiten un conjunto limitado de operadores del query cuando se realiza en un campo consultable cifrado.

Queries sobre campos no cifrados o campos cifrados con un tipo de query compatible devuelven datos cifrados que luego se descifran en el cliente.

Queryable Encryption actualmente admite los siguientes tipos de consultas:

  • none

  • equality

  • range

  • prefix

  • suffix

  • substring

Si el tipo de query no está especificado, es por defecto none. Si el tipo de query es none, MongoDB cifra el campo y los clientes no pueden consultarlo.

Importante

Soporte de comparación

Se admite la comparación de un campo cifrado con un valor de texto sin formato.

{$expr: {$eq: ["$encrypted1", "plaintext_value"]}}

La comparación de un campo cifrado con otro campo cifrado fallará.

{$expr: {$eq: ["$encrypted1", "$encrypted2"]}}

Los campos configurados para queryType: "equality" admiten las siguientes expresiones:

Las consultas de rango convierten implícitamente consultas de igualdad en $lte y $gte. Por lo tanto, los campos configurados para queryType: "range" son compatibles con todas las expresiones anteriores, así como con las siguientes expresiones:

Las queries que especifican cualquier otro operador del query contra un campo cifrado devuelven un error.

Las queries que comparan un campo cifrado con null o una expresión regular siempre lanzan un error, incluso si se utiliza un operador del query compatible.

Al utilizar un MongoClient configurado para Queryable Encryption, los siguientes operadores del query lanzan un error, incluso si se ejecutan en un campo no cifrado:

Los controladores configurados para el cifrado automático aceptan los siguientes operadores de actualización cuando se aplican a campos cifrados:

Las actualizaciones que especifiquen cualquier otro operador de actualización a un campo cifrado devuelven un error.

Las operaciones de actualización con el siguiente comportamiento generan un error, incluso si se utiliza un operador compatible:

  • La operación de actualización produce un arreglo dentro de una ruta cifrada.

  • La operación de actualización utiliza la sintaxis de la expresión de agregación.

Para las operaciones de actualización que especifiquen un filtro de query en campos cifrados, el filtro de query debe usar solo operadores admitidos en esos campos.

Las actualizaciones de estilo reemplazo son compatibles, sin embargo, si el documento de reemplazo contiene un Timestamp(0,0) dentro de un campo cifrado de nivel superior, Queryable Encryption mostrará un error. El valor de (0,0) indica que el mongod debe generar la marca temporal. mongod no puede generar campos cifrados.

Los drivers compatibles configurados para cifrado automático no soportan comandos de inserción con el siguiente comportamiento:

  • Insertando un documento con Timestamp(0,0) asociado a un campo cifrado. El valor (0,0) indica que mongod debe generar la Marca de tiempo. Dado que el mongod no puede generar campos cifrados, la marca de tiempo resultante no estaría cifrada.

El cifrado automático no admitirá etapas de agregación que lean de o escriban en colecciones adicionales. Estas fases son:

Los drivers compatibles configurados para el cifrado automático soportan las siguientes etapas del pipeline de agregación:

Los pipelines de agregación que operan en colecciones configuradas para el cifrado automático que especifican cualquier otra fase devuelven un error.

Para cada etapa de pipeline soportada, MongoDB rastrea los campos que deben estar cifrados a medida que pasan por los pipelines compatibles y los marca para cifrado.

Cada etapa admitida debe especificar solo los operadores del query admitidos y las expresiones de agregaciónadmitidas.

A partir de MongoDB 8.1, puedes hacer referencia a múltiples colecciones cifradas en una etapa de $lookup. Sin embargo, $lookup no permite:

  • Utilizando un campo cifrado como campo de unión en el localField o foreignField.

  • Usar cualquier campo en un arreglo cifrado. Un arreglo se considera cifrado si contiene algún elemento cifrado.

    • Por ejemplo, no puedes utilizar ningún campo dentro del resultado como en el arreglo de la operación $lookup.

El cifrado automático es compatible con $graphLookup solo si la colección from coincide con la colección contra la que se ejecuta la agregación. $graphLookup etapas que hacen referencia a una colección diferente de from devuelven un error.

El cifrado automático no admite fuentes de metadatos de agregación "sin conexión", que leen metadatos que no pertenecen a una colección específica, como:

El cifrado automático no admite la etapa $planCacheStats, ya que el resultado puede contener información sensible.

Los drivers compatibles configurados para el cifrado automático admiten las siguientes expresiones en campos cifrados configurados para consultas de igualdad:

Los drivers compatibles configurados para cifrado automático admiten las siguientes expresiones en los campos cifrados configurados para prefix, suffix o substring consultas:

Todas las demás expresiones de agregación devuelven un error si se ejecutan sobre campos cifrados.

Las etapas de agregación con el siguiente comportamiento devuelven un error, incluso si se utiliza una expresión de agregación compatible:

Expresiones
Comportamiento rechazado
Ejemplo

La expresión especifica un campo cuyas propiedades de cifrado no pueden ser conocidas hasta el tiempo de ejecución y una etapa de agregación posterior incluye una expresión que hace referencia a ese campo.

$addFields : {
"valueWithUnknownEncryption" : {
$cond : {
if : { "$encryptedField" : "value" },
then : "$encryptedField",
else: "unencryptedValue"
}
}
},
{
$match : {
"valueWithUnknownEncryption" : "someNewValue"
}
}

La expresión crea un nuevo campo que referencia un campo cifrado y opera sobre ese nuevo campo en la misma expresión.

{
$eq : [
{"newField" : "$encryptedField"},
{"newField" : "value"
]
}

La expresión hace referencia al prefijo de un campo cifrado dentro de la expresión de comparación.

{ $eq : [ "$prefixOfEncryptedField" , "value"] }

El resultado de la expresión se compara con un campo cifrado.

{
$eq : [
"$encryptedField" ,
{ $ne : [ "field", "value" ] }
]
}

La expresión vincula una variable a un campo cifrado o intenta volver a vincular $$CURRENT.

{
$let: {
"vars" : {
"newVariable" : "$encryptedField"
}
}
}

El primer argumento de la expresión es un campo cifrado, y

  • El segundo argumento de la expresión no es un literal de arreglo

    -OR-

  • El segundo argumento de la expresión es un campo cifrado.

{
$in : [
"$encryptedField" ,
"$otherEncryptedField"
]
}

Los controladores configurados para el cifrado automático no admiten ninguna operación de lectura ni escritura que requiera cifrar los siguientes tipos de valores:

El Queryable Encryption no oculta adecuadamente la información de tipo de estos valores.

Queryable Encryption no admite la encriptación automática en los campos dentro de un arreglo de documentos.

Queryable Encryption no admite operaciones de lectura ni escritura en un campo cifrado donde la operación compara el campo cifrado con los siguientes tipos de valores:

  • array

  • object

Volver

Referencia