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

Query un documento con campos cifrados

Esta guía muestra cómo utilizar una aplicación habilitada para Queryable Encryption para recuperar un documento que tiene campos encriptados.

Después de completar los pasos de esta guía, deberías poder utilizar tu aplicación para hacer query datos en los campos cifrados y para descifrar esos campos como usuario autorizado.

Crea una colección cifrada e inserta documentos antes de continuar.

1

Si habilitaste consultas de igualdad en un campo cifrado, puedes recuperar documentos que tengan un valor especificado en ese campo.

En el siguiente ejemplo se realiza una query de igualdad en un campo cifrado y se imprime la información descifrada:

const findResult = await encryptedCollection.findOne({
"patientRecord.ssn": "987-65-4320",
});
console.log(findResult);
var ssnFilter = Builders<Patient>.Filter.Eq("patientRecord.ssn", patient.PatientRecord.Ssn);
var findResult = await encryptedCollection.Find(ssnFilter).FirstOrDefaultAsync();
Console.WriteLine(findResult.ToJson());
var findResult PatientDocument
err = coll.FindOne(
context.TODO(),
bson.M{"patientRecord.ssn": "987-65-4320"},
).Decode(&findResult)
Patient findResult = collection.find(
new BsonDocument()
.append("patientRecord.ssn", new BsonString("987-65-4320")))
.first();
System.out.println(findResult);
const findResult = await encryptedCollection.findOne({
"patientRecord.ssn": "987-65-4320",
});
console.log(findResult);
$findResult = $encryptedCollection->findOne([
'patientRecord.ssn' => '987-65-4320',
]);
print_r($findResult);
find_result = encrypted_collection.find_one({
"patientRecord.ssn": "987-65-4320"
})
print(find_result)
find_result = encrypted_collection.find("patientRecord.ssn" => "987-65-4320").first
puts find_result.inspect
let find_result = encrypted_coll.find_one(doc! {"patientRecord.ssn": "987-65-4320"}).await?;
match find_result {
Some(document) => println!("{:?}", document),
None => println!("Document not found"),
}
2

Si permite consultas de rango en un campo cifrado, puede recuperar documentos en los que el valor de ese campo se encuentra dentro del rango que usted especifique.

El siguiente ejemplo realiza una query de rango en un campo cifrado e imprime los datos descifrados:

const findResult = await encryptedCollection.findOne({
"patientRecord.billAmount": { $gt: 1000, $lt: 2000 },
});
console.log(findResult);
var filter = Builders<Patient>.Filter.Gt("patientRecord.billAmount", 1000) &
Builders<Patient>.Filter.Lt("patientRecord.billAmount", 2000);
var findResult = encryptedCollection.Find(filter).FirstOrDefault();
Console.WriteLine(findResult.ToJson());
filter := bson.D{
{"patientRecord.billAmount", bson.D{
{"$gt", 1000},
{"$lt", 2000},
}},
}
var findResult PatientDocument
err = coll.FindOne(context.TODO(), filter).Decode(&findResult)
if err != nil {
log.Fatal(err)
}
if err != nil {
fmt.Print("Unable to find the document\n")
} else {
output, _ := json.MarshalIndent(findResult, "", " ")
fmt.Printf("%s\n", output)
}
Document filter = new Document("patientRecord.billAmount",
new Document("$gt", 1000).append("$lt", 2000));
Patient findResult = collection.find(filter).first();
System.out.println(findResult);
const findResult = await encryptedCollection.findOne({
"patientRecord.billAmount": { $gt: 1000, $lt: 2000 },
});
console.log(findResult);
$findResult = $encryptedCollection->findOne([
'patientRecord.billAmount' => ['$gt' => 1000, '$lt' => 2000],
]);
print_r($findResult);
query = {"patientRecord.billAmount": {"$gt": 1000, "$lt": 2000}}
find_result = encrypted_collection.find_one(query)
print(find_result)
find_result = encrypted_collection.find(
"patientRecord.billAmount" => { "$gt" => 1000, "$lt" => 2000 }
).first
puts find_result.inspect
let query =
doc! { "$and": [
doc! { "patientRecord.billAmount": doc! { "$gt": 1000 } },
doc! { "patientRecord.billAmount": doc! { "$lt": 2000 } }
]
};
let find_result = encrypted_coll.find_one(query).await?;
match find_result {
Some(document) => println!("{:?}", document),
None => println!("Document not found"),
}
3

Nota

MongoDB Shell actualmente no es compatible con consultas de prefijo, sufijo o subcadena en campos cifrados.

Si activaste las queries de prefijo, sufijo o substring en un campo cifrado, puedes recuperar documentos donde el valor de ese campo incluya la string especificada en tus criterios de búsqueda.

El siguiente ejemplo realiza una query de prefijo en un campo cifrado e imprime los datos descifrados:

var filter = new BsonDocument("$expr", new BsonDocument("$encStrStartsWith",
new BsonDocument
{
{ "input", "$patientRecord.ssn" },
{ "prefix", "987" }
}));
var findResult = await encryptedCollection.Find(filter).ToCursorAsync();
Console.WriteLine(findResult.FirstOrDefault().ToJson());

Para ejecutar una query de sufijo, reemplazar $encStrStartsWith con $encStrEndsWith. Luego, reemplace la opción prefix con la opción suffix.

Para realizar una query de subcadena, usa el operador $encStrContains, como se muestra en el siguiente ejemplo:

var filter = new BsonDocument("$expr", new BsonDocument("$encStrContains",
new BsonDocument
{
{ "input", "$patientRecord.ssn" },
{ "substring", "-65-432" }
}));
var findResult = await encryptedCollection.Find(filter).ToCursorAsync();
Console.WriteLine(findResult.FirstOrDefault().ToJson());

Nota

Actualmente, el controlador Go no admite consultas de prefijo, sufijo o subcadena en campos cifrados.

Si activaste las queries de prefijo, sufijo o substring en un campo cifrado, puedes recuperar documentos donde el valor de ese campo incluya la string especificada en tus criterios de búsqueda.

El siguiente ejemplo realiza una query de prefijo en un campo cifrado e imprime los datos descifrados:

Document filter = new Document("$expr",
new Document("$encStrStartsWith",
new Document()
.append("input", "$patientRecord.ssn")
.append("prefix", "987")));
Patient findResult = collection.find(filter).first();
System.out.println(findResult);

Para realizar una consulta por sufijo, reemplace $encStrStartsWith por $encStrEndsWith. Luego, cambia la opción prefix por la opción suffix.

Para realizar una query de subcadena, usa el operador $encStrContains, como se muestra en el siguiente ejemplo:

Document filter = new Document("$expr",
new Document("$encStrContains",
new Document()
.append("input", "$patientRecord.ssn")
.append("substring", "-65-432")));
Patient findResult = collection.find(filter).first();
System.out.println(findResult);

Si activaste las queries de prefijo, sufijo o substring en un campo cifrado, puedes recuperar documentos donde el valor de ese campo incluya la string especificada en tus criterios de búsqueda.

El siguiente ejemplo realiza una query de prefijo en un campo cifrado e imprime los datos descifrados:

const findResult = await encryptedCollection.findOne(
{ $expr: { $encStrStartsWith:
{ input: "$patientRecord.ssn", prefix: "987" }
}
})

Para realizar una consulta por sufijo, reemplace $encStrStartsWith por $encStrEndsWith. Luego, cambia la opción prefix por la opción suffix.

Para realizar una query de subcadena, usa el operador $encStrContains, como se muestra en el siguiente ejemplo:

const findResult = await encryptedCollection.findOne(
{ $expr: { $encStrContains:
{ input: "$patientRecord.ssn", substring: "-65-432" }
}
})

Nota

Actualmente, la librería PHP no admite queries de prefijo, sufijo o subcadena en campos cifrados.

Si activaste las queries de prefijo, sufijo o substring en un campo cifrado, puedes recuperar documentos donde el valor de ese campo incluya la string especificada en tus criterios de búsqueda.

El siguiente ejemplo realiza una query de prefijo en un campo cifrado e imprime los datos descifrados:

find_result = encrypted_collection.find_one(
{ "$expr": { "$encStrStartsWith":
{ "input": "$patientRecord.ssn", "prefix": "987" }
}
})

Para realizar una consulta por sufijo, reemplace $encStrStartsWith por $encStrEndsWith. Luego, cambia la opción prefix por la opción suffix.

Para realizar una query de subcadena, usa el operador $encStrContains, como se muestra en el siguiente ejemplo:

find_result = encrypted_collection.find_one(
{ "$expr": { "$encStrContains":
{ "input": "$patientRecord.ssn", "substring": "-65-432" }
}
})

Nota

Actualmente, el driver de Ruby no admite consultas de prefijo, sufijo ni subcadena en campos cifrados.

Nota

Actualmente, el controlador de Rust no admite consultas de prefijo, sufijo o subcadena en campos cifrados.

La salida de los ejemplos de código anteriores debe ser similar a la siguiente:

{
"_id": {
"$oid": "648b384a722cb9b8392df76a"
},
"name": "Jon Doe",
"record": {
"ssn": "987-65-4320",
"billing": {
"type": "Visa",
"number": "4111111111111111"
},
"billAmount": 1500
},
"__safeContent__": [
{
"$binary": {
"base64": "L1NsYItk0Sg+oL66DBj6IYHbX7tveANQyrU2cvMzD9Y=",
"subType": "00"
}
}
]
}

Advertencia

No modifique el campo __safeContent__

El campo __safeContent__ es esencial para Queryable Encryption. No modifiques el contenido de este campo.

Volver

Crear una colección

En esta página