Visão geral
Este guia mostra como usar um aplicação habilitado para Queryable Encryption para recuperar um documento que tenha campos criptografados.
Depois de concluir as etapas deste guia, você poderá usar seu aplicativo para consultar dados em campos criptografados e descriptografar esses campos como usuário autorizado.
Antes de começar
Crie uma coleção criptografada e insira documentos antes de continuar.
Procedimento
Executar uma query de um campo criptografado com igualdade
Se você habilitou queries de igualdade em um campo criptografado, você poderá recuperar documentos que têm um valor especificado neste campo.
O exemplo a seguir executa uma query de igualdade em um campo criptografado e imprime os dados descriptografados:
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).ToCursorAsync(); Console.WriteLine(findResult.FirstOrDefault().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)
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"), }
Executar uma query de um campo criptografado com faixa
Se você habilitou queries de intervalo em um campo criptografado, poderá recuperar documentos onde o valor desse campo está dentro do intervalo especificado.
O exemplo a seguir executa uma consulta de intervalo em um campo criptografado e imprime os dados descriptografados:
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)
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"), }
Consultar um campo criptografado para obter uma correspondência de prefixo, sufixo ou substring
Se você ativou queries de prefixo, sufixo ou substring em um campo criptografado, poderá recuperar documentos em que o valor desse campo inclua a string especificada em seus critérios de pesquisa.
O exemplo a seguir executa uma query de prefixo em um campo criptografado e imprime os dados descriptografados:
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 executar uma query de sufixo, substitua $encStrStartsWith
por $encStrEndsWith
. Em seguida, substitua a opção prefix
pela opção suffix
.
Para executar uma query de substring, use o operador $encStrContains
, como mostrado no seguinte exemplo:
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());
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 executar uma query de sufixo, substitua $encStrStartsWith
por $encStrEndsWith
. Em seguida, substitua a opção prefix
pela opção suffix
.
Para executar uma query de substring, use o operador $encStrContains
, como mostrado no seguinte exemplo:
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);
const findResult = await encryptedCollection.findOne( { $expr: { $encStrStartsWith: { input: "$patientRecord.ssn", prefix: "987" } } })
Para executar uma query de sufixo, substitua $encStrStartsWith
por $encStrEndsWith
. Em seguida, substitua a opção prefix
pela opção suffix
.
Para executar uma query de substring, use o operador $encStrContains
, como mostrado no seguinte exemplo:
const findResult = await encryptedCollection.findOne( { $expr: { $encStrContains: { input: "$patientRecord.ssn", substring: "-65-432" } } })
find_result = encrypted_collection.find_one( { "$expr": { "$encStrStartsWith": { "input": "$patientRecord.ssn", "prefix": "987" } } })
Para executar uma query de sufixo, substitua $encStrStartsWith
por $encStrEndsWith
. Em seguida, substitua a opção prefix
pela opção suffix
.
Para executar uma query de substring, use o operador $encStrContains
, como mostrado no seguinte exemplo:
find_result = encrypted_collection.find_one( { "$expr": { "$encStrContains": { "input": "$patientRecord.ssn", "substring": "-65-432" } } })
Resultado da query
A saída dos exemplos de código anteriores deve ser semelhante a este:
{ "_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" } } ] }
Aviso
Não modifique o campo __safeContent__.
O campo __safeContent__
é essencial para o Queryable Encryption. Não modifique o conteúdo deste campo.