3.3.1 - Tipus de dades
Els valors dels elements, és a dir de les parelles clau valor, poden ser d'una amplia gama de tipus. Fem un ràpid repàs.
En els exemples que van a continuació definim senzillament parelles clau-valor dels diferents tipus, o en tot cas ens ho guardem en variables, però no guardarem encara en la Base de Dades (ho farem en la següent pregunta).
Quan guardem en una variable es mostrarà el prompt, la definició de la variable i després el resultat d'haver guardat la variable. Utilitzarem requadres blancs. Els requadres grocs són únicament de la definició d'una clau-valor d'un determinat tipus
NULL
Més que un tipus de dades és un valor, millor dit, l'absència de valor
{ "x" : null }
BOOLEAN
El tipus booleà, que pot agafar els valors true o false.
{ "x" : true }
{ "y" : false }
NUMBER
Per defecte, el tiups de dades numèrics serà el de coma flotant (float), simple precisió. Si volem un altre tiups (enter, doble precisió, ...) ho haurem d'indicar expressament. Així els dos següents valors són float:
{ "x" : 3.14 }
{ "y" : 3 }
Si volem que siga estrictament enter, per exemple, haurem d'utilitzar una funció de conversió:
{ "x" : NumberDouble("3.14") }
{ "y" : NumberInt("3") }
STRING
Es pot guardar qualsevol cadena amb caràcters de la codificació UTF-8
{ x : "Hola, què tal?"}
DATE
Es guarda data i hora, i internament es guarden en milisegons des de l'any inicial. No es guara el Time zone , és a dir, la desviació respecte a l'hora internacional.
{ x : ISODate("2016-02-24T11:15:27.471Z") }
Normalment utilitzarem funcions de tractament de la data-hora. L'anterior era per a convertir el string en data-hora. La següent és per a obtenir la data-hora actual:
{ x : new Date() }
És a dir, que si no posem paràmetre, ens dóna la data-hora actual. Però li podem posar com a paràmetre la data-hora que volem que genere. En aquest exemple, només posem data, per tant l'ho serà les 00:00:
> z = new Date("2016-08-01")
ISODate("2016-08-01T00:00:00Z")
En aquest sí que posem una determinada hora, i observeu com hem deposar la T (Time) entre el dia i l'hora:
> z = new Date("2016-08-01T10:00")
ISODate("2016-08-01T08:00:00Z")
És molt important que posem sempre New Date() per a generar una data-hora. Si posem únicament Date(), el que estem generant és un string (amb la data i hora, però un string):
> z = Date("2016-08-01")
Fri Feb 26 2016 08:30:13 GMT+0100 (CET)
ARRAY
És un conjunt d'elements, cadascun de qualsevol tipus, encara que el més habitual és que siguen del mateix tipus. Van entre claudàtors ( [ ] ) i els elements separats per comes.
{ x : [ 2 , 4 , 6 , 8 ] }
Com comentàvem, cada element de l'array pot ser de qualsevol tipus:
{ y : [ 2 , 3.14 , "Hola" , new Date() ] }
En MongoDB podrem treballar molt bé amb arrays, i tindrem operacions per a poder buscar dins de l'array, modificar un element, crear índex, ...
DOCUMENTS (OBJECTES)
Els documents poden contenir com a elements uns altres documents (objectes en la terminologis¡a JSON, però documents en la terminologia de MongoDB).
Com sempre van entre claus ( { } ), i els elements que contindran van separats per comes i seran parelles clau-valor de qualsevol tipus (fins i tot altres documents).
{ x : { a : 1 , b : 2 } }
Posar documents dins d'uns altres documents (el que s'anomena embedded document) ens permet guardar la informació d'una manera més real, no tan plana. Així per exemple, les dades d'una persona les podríem definir de la següent manera. Les posarem en una variable, per veure després com podem accedir als diferents elements, encara que el més normal serà guardar-lo en la Base de Dades (amb insert() o save() ). Si copiem el que va a continuació al terminal de Mongo, ens apareixerà amb un format estrany. És perquè la sentència d'assignació a la variable ocupa més d'una línia, i apareixeran 3 punts al principi per a indicar que continua la sentència. Però funcionarà perfectament :
doc = {
nom:"Joan Martí",
adreça: {
carrer:"Major",
número:1,
població:"Castelló"
} ,
telèfons : [964223344,678345123]
}
Observeu com aquesta estructura que ha quedat tan clara, segurament en una Base de Dades Relacional ens hauria tocat guardar en 3 taules: la de persones, la d'adreces i la de telèfons.
Per a accedir als elements d'un document posàvem el punt. Doncs el mateix per als elements d'un document dins d'un document. I també podem accedir als elements d'un array, posant l'índex entre claudàtors.
> doc.nom
Joan Martí
> doc.adreça
{ "carrer" : "Major", "número" : 1, "població" : "Castelló" }
> doc.adreça.carrer
Major
> doc.telèfons
[ 964223344, 678345123 ]
> doc.telèfons[0]
964223344
OBJECT ID
És un tipus que defineix MongoDB per a poder obtenir valors únics. És el valor per defecte de l'element _id , necessari en tot document (atenció: en un document, no en un element de tipus document que hem dit equivalent a l'objecte de JSON). És un número long, és a dir que utilitza 24 bytes.
Farem proves de la seua utilització en la seüent pregunta, en el moment d'inserir diferents documents.
Llicenciat sota la Llicència Creative Commons Reconeixement SenseObraDerivada 4.0