DEV Community

JessicaMeleroDev
JessicaMeleroDev

Posted on

Curiosidades del tipo de datos de MongoDB

Hoy voy ha hablar sobre los distintos tipos de datos que acepta MongoDB.

Sabemos que existen los datos tipo Null, Number, String, Boolean y Array entre otros. Bien, pues MongoDB acepta todos estos y también documentos embebidos, expresiones regulares, datos tipo fecha, tipo ObjectID, datos binarios e incluso código Javascript!!

wow

Sí, puedes almacenar en un dato una función escrita en Javascript ya que, al fin y al cabo la terminal de mongo es un intérprete de Javascript.

{"algun_dato": function(){...}}
Enter fullscreen mode Exit fullscreen mode

Me parece interesante el tipo ObjectID. {"_id":ObjectId("601d90b9414ff5d41b3e0eb3")}
Podemos ver que es un conjunto de 24 números y letras pero, ¿qué son estos números y letras?.
Estos números tienen su sentido aunque no lo parezca. Los 18 primeros hacen referencia al timestamp, es decir, el tiempo en milisegundos correspondientes al momento de creación del documento. Y los 6 últimos es un contador que se va autoincrementando por cada nueva inserción.
objectidMongo

También es curioso el tipo de dato documento embebido. Esto significa que dentro del documento hay otro documento.

{
  "nombre":"Enki",
  "edad": 6,
  "direccion": {
     "calle": "Calle Mayor, 5",
     "poblacion": "Alicante",
     "provincia": "Alicante",
     "pais": "Spain"
  }
}
Enter fullscreen mode Exit fullscreen mode

En este caso la dirección es el segundo documento. Dependiendo de la magnitud del documento principal y de la lógica empleada, podría ser conveniente separarlo en otro documento y referenciarlo.

💡 ¿Qué hace mongo por detrás?

Si quieres saber qué hace por detrás una función de mongo, simplemente ejecútala pero sin paréntesis.

> db.mascotas.find
function (query, fields, limit, skip, batchSize, options) {
    var cursor = new DBQuery(this._mongo,
                             this._db,
                             this,
                             this._fullName,
                             this._massageObject(query),
                             fields,
                             limit,
                             skip,
                             batchSize,
                             options || this.getQueryOptions());

    {
        const session = this.getDB().getSession();

        const readPreference = session._serverSession.client.getReadPreference(session);
        if (readPreference !== null) {
            cursor.readPref(readPreference.mode, readPreference.tags);
        }

        const readConcern = session._serverSession.client.getReadConcern(session);
        if (readConcern !== null) {
            cursor.readConcern(readConcern.level);
        }
    }

    return cursor;
}

Enter fullscreen mode Exit fullscreen mode

Así podrás ver cómo es la función que actúa por detrás cuando realizas este comando 😉

Como he dicho antes, la terminal de mongo es un intérprete de Javascript, ¿qué significa esto? Significa que podemos ejecutar código Javascript en su terminal e incluso scripts.
Realmente, cuando ejecutamos estos helpers de mongo

> use db
> show dbs
> show tables
Enter fullscreen mode Exit fullscreen mode

por detrás se está ejecutando respectivamente

> db.getSisterDB('db')
> db.getMongo().getDBs()
> db.getCollectionNames()
Enter fullscreen mode Exit fullscreen mode

Os animo a que probéis este último apartado y así entender un poco más cómo funciona MongoDB.

Espero que os haya servido y os haya parecido interesante. Cualquier duda o aportación, ya sabéis, dejar un comentario abajo 👇

Top comments (0)