Undefined Values
Overview
In this guide, you can learn to control how the driver serializes
undefined
values. By default, the driver serializes undefined
values
as null
values during write operations.
Ignore Undefined Values
To make the driver ignore fields with
undefined
values during serialization, set the
ignoreUndefined
setting to true
. When you specify this setting,
the driver does not serialize fields with undefined
values.
The following example inserts two documents. The first insert operation has
the ignoreUndefined
setting set to true
, so the driver does not
serialize the salesTax
field in that operation. The second operation
inserts a document that has the salesTax
field with a null
value:
await myColl.insertOne( { state: "Montana", salesTax: undefined, }, { ignoreUndefined: true } ); await myColl.insertOne({ state: "New Hampshire", salesTax: undefined, });
The documents appear in the collection as follows:
{ _id: ..., state: "Montana", }, { _id: ..., state: "New Hampshire", salesTax: null }
Set the Scope for Serializing Undefined Values
You can specify the ignoreUndefined
setting at the following levels:
The client level
The database level
The collection level
The operation level
The ignoreUndefined
setting automatically applies to the scope of the
object instance in which you specified it and any other objects created
from that instance.
For example, if you set the ignoreUndefined
setting when
instantiating a database object, any collection instance created from
that object inherits the setting. Furthermore, any operations that you
call on that collection instance also inherit the setting.
The following example performs an find-and-update operation that
inherits the ignoreUndefined
setting from the myDB
database
object. This operation does not produce any data changes because the
driver ignores the gasTax
field:
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 } } );
You can specify the ignoreUndefined
setting again at any level to
override any inherited settings.
For example, if you set ignoreUndefined
to true
on your
collection object, you can override the setting in individual write
operations that you execute on that 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 } );