Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / / / / /

Fazer query de um documento com campos criptografados

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.

Crie uma coleção criptografada e insira documentos antes de continuar.

1

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"),
}
2

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"),
}
3

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" }
}
})

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.

Voltar

Criar uma coleção

Nesta página