Valores indefinidos
Nesta página
Visão geral
Neste guia, você aprende a controlar como o driver serializa os valores do undefined
. Por padrão, o driver serializa valores undefined
como valores null
durante operações de gravação.
Ignorar valores indefinidos
Para fazer o driver ignorar campos com valores undefined
durante a serialização, defina a configuração ignoreUndefined
como true
. Ao especificar essa configuração, o driver não serializa campos com valores undefined
.
O exemplo a seguir insere dois documentos. A primeira operação de inserção tem a configuração de ignoreUndefined
definida como true
, portanto, o driver não serializa o campo salesTax
nesta operação. A segunda operação insere um documento com o campo salesTax
e com um valor null
:
await myColl.insertOne( { state: "Montana", salesTax: undefined, }, { ignoreUndefined: true } ); await myColl.insertOne({ state: "New Hampshire", salesTax: undefined, });
Os documentos aparecem na coleção da seguinte maneira:
{ _id: ..., state: "Montana", }, { _id: ..., state: "New Hampshire", salesTax: null }
Defina o escopo para a serialização de valores indefinidos
Você pode especificar a configuração ignoreUndefined
nos seguintes níveis:
O nível do cliente
O nível de banco de dados
O nível da collection
O nível de operação
A configuração ignoreUndefined
se aplica automaticamente ao escopo da instância do objeto na qual você a especificou e a quaisquer outros objetos criados a partir dessa instância.
Por exemplo, se você definir a configuração ignoreUndefined
ao instanciar um objeto do banco de dados, qualquer instância de coleção criada a partir desse objeto herdará a configuração. Além disso, quaisquer operações que você chamar sobre essa instância da coleção também herdam a configuração.
O exemplo abaixo executa uma operação de localização e atualização que herda a configuração ignoreUndefined
do objeto de banco de dados myDB
. Esta operação não produz alterações de dados porque o driver ignora o campo gasTax
:
const myDB = client.db("test", { ignoreUndefined: true }); // The collection inherits the ignoreUndefined setting const myColl = myDB.collection("states"); // Any write operation will not serialize undefined values await myColl.findOneAndUpdate( { state: "Georgia" }, { $set: { gasTax: undefined } } );
Você pode especificar a configuração ignoreUndefined
novamente em qualquer nível para substituir quaisquer configurações herdadas.
Por exemplo, se você definir ignoreUndefined
como true
em seu objeto de collection, você poderá substituir a configuração em operações de gravação individuais executadas nesta collection.
const myColl = myDB.collection("states", { ignoreUndefined: true }); // The insert operation will not serialize undefined values await myColl.insertOne({ state: "South Dakota", capitalGainsTax: undefined, }); // The insert operation will serialize undefined values await myColl.insertOne( { state: "Texas", capitalGainsTax: undefined }, { ignoreUndefined: false } );