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!!
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(){...}}
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.
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"
}
}
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;
}
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
por detrás se está ejecutando respectivamente
> db.getSisterDB('db')
> db.getMongo().getDBs()
> db.getCollectionNames()
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)