Changing Document Field Types with MongoDB

Emmanuel Gautier / March 30, 2023

2 min read

MongoDB is a flexible and versatile database system that can handle a wide variety of data types. However, there are situations where you may need to change the data type of a document field during query execution. For example, you may want to convert a string field to a date field, or vice versa. Fortunately, MongoDB provides various aggregation operators, such as $convert, that allow you to manipulate document field types during query execution.

The $convert operator is a MongoDB aggregation pipeline stage that converts a value to a specified data type. It is useful when you want to convert a value in a document from one data type to another. This operator takes three parameters:

  • input: The value to be converted
  • to: The target data type to which the input value should be converted. Valid data types include “double”, “string”, “objectId”, “bool”, “date”, “int”, “long”, “decimal”, “timestamp”, and “binary”.
  • onError (optional): Specifies the behavior in case an error occurs during the conversion. Valid options are “error”, “null”, or “skip”.
  • onNull (optional): Specifies the behavior in case of null value

More details and examples about the $convert operator are available on the official MongoDB manual.

MongoDB $convert example

Here’s an example usage of the $convert operator to convert a string field to a date:

db.collection.aggregate([
   {
      $project: {
         convertedDate: {
          $convert: {
            input: "$stringField",
            to: "date",
            onError: {
              $concat:
                [
                  "Could not convert ",
                  { $toString: "$stringField" },
                  " to type integer."
                ]
            },
            onNull: null
          }
        }
      }
   }
])

In this example, we use the operator within a $project stage to convert the stringField to a date and store the result in a new field called convertedDate.

Javascript MongoDB $convert Example

Here is the same example but with the JavaScript SDK:

const { MongoClient } = require('mongodb')

// Replace the connection string with your own.
const uri =
  'mongodb+srv://<username>:<password>@<cluster>/<database>?retryWrites=true&w=majority'
const client = new MongoClient(uri)

async function run() {
  try {
    await client.connect()

    const database = client.db('mydb')
    const collection = database.collection('mycollection')

    const pipeline = [
      {
        $project: {
          convertedDate: {
            $convert: {
              input: '$stringField',
              to: 'date',
              onError: {
                $concat: [
                  'Could not convert ',
                  { $toString: '$stringField' },
                  ' to type integer.',
                ],
              },
              onNull: null,
            },
          },
        },
      },
    ]

    const result = await collection.aggregate(pipeline).toArray()
    console.log(result)
  } finally {
    await client.close()
  }
}

run().catch(console.dir)

Consulting

If you're seeking solutions to a problem or need expert advice, I'm here to help! Don't hesitate to book a call with me for a consulting session. Let's discuss your situation and find the best solution together.