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

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).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

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

Observação

Atualmente, o MongoDB Shell não suporta queries de prefixo, sufixo ou substring em campos criptografados.

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());

Observação

Atualmente, o driver Go não suporta queries de prefixo, sufixo ou substring em campos criptografados.

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:

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);

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:

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

Observação

Atualmente, a Biblioteca PHP não suporta consultas de prefixo, sufixo ou substring em campos criptografados.

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:

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

Observação

Atualmente, o driver Ruby não suporta queries de prefixo, sufixo ou substring em campos criptografados.

Observação

Atualmente, o driver Rust não suporta queries de prefixo, sufixo ou substring em campos criptografados.

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