Overview
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.
Antes de comenzar
Crea una colección cifrada e inserta documentos antes de continuar.
Procedimiento
Query un campo cifrado con igualdad
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"), }
Query un Campo Cifrado con Rango
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"), }
Query Result
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__
La __safeContent__ El campo es esencial para Queryable Encryption. No modifiques el contenido de este campo.