Details
Description
In an encrypted collection with encrypted fields, if a user inserts a document with no encrypted fields, and attempts to update the document with $set to set non-encrypted fields, the document fails to update, returning a response “Found indexed encrypted fields but could not find {}safeContent{}“.
For example, if the collection schema is:
assert.commandWorked(edb.createCollection("basic", {
|
encryptedFields: {
|
"fields": [
|
{"path": "first", "bsonType": "string", keyId: studentsKeyId, "queries": {"queryType": "equality"}},
|
{"path": "last", "bsonType": "string", keyId: key2, "queries": {"queryType": "equality"}}
|
]
|
}
|
}));
|
Then we insert the doc:
edb.basic.insert({"middle": "happy"})
|
Then run an updateOne command:
edb.basic.updateOne({_id: ObjectId("649b414fb88e21eab30d6481")}, {$set: {middle: "E"}})
|
We get a response:
WriteError({
|
"index" : 0,
|
"code" : 6371506,
|
"errmsg" : "Found indexed encrypted fields but could not find _safeContent_",
|
"op" : {
|
"q" :
|
{ "_id" : ObjectId("649b414fb88e21eab30d6481") }
|
,
|
"u" : {
|
"$set" :
|
{ "middle" : "E" }
|
},
|
"multi" : false,
|
"upsert" : false
|
}
|
})
|