Baietii de la MongoDB in colaborare cu edX pun la dispozitie niste cursuri gratuite pe care eu le recomand cu mare caldura. Eu am facut M101P (varianta cu Python a cursului pentru developers), si am fost foarte placut impresionat de cat de bine e explicat.
Vad ca cel mai curand incepe cel pentru Java, pe 5 Aug, iar apoi cel pentru Node.JS, pe 12 Aug, dar poti incepe linistit cu oricare din ele, indiferent daca folosesti Java sau Node sau nu, pentru ca accentul este pus pe Mongo, iar pentru partea de Java/Python/etc ti se da codul de-a gata daca vrei sa nu iti bati capul sa il scrii tu. Majoritatea muncii o vei face in consola de mongo oricum.
După calculele mele, „coloana” tags va încălca flagrant principiul DRY după nu foarte mult timp. Idem pentru categorii (dacă e cazul). Singurul avantaj în acest moment ar fi integrarea comentariilor în obiectul post-ului, nu într-o „tabelă” separată.
Din punctul de vedere al lui Mongo, nu, e doar un array cu items de tip ObjectId, care e doar un data type ca oricare altul. Mongo nu are notiunea de relatii intre colectii, si cum nu are nici join-uri, te priveste daca vrei sa implementezi vreun soi de relatie conceptuala.
Poate nu are noțiunea de primary key și foreign key pentru că și mie singurul mod de a nu încălca principiul DRY, este să relaționezi obiectele. Oricum, în acest moment nu înțeleg de ce acest lucru este un pas înainte. Poate mai încolo.
Nu prea inteleg ce vrei sa zici. Primary key are, pentru asta e _id:
MongoDB reserves the _id field in the top level of all documents as a primary key. _id must be unique, and always has an index with a unique constraint
Cand am zis ca nu are notiunea de relatii la foreign keys si joins ma refeream, impreuna. Pentru ca tine cont ca poti avea RDBMS cu joins dar fara foreign key constraints (vezy MyISAM). Acum, tu bineinteles ca vrei sa relationezi documentele intr-un fel, dar o faci la nivelul aplicatiei tale, DBMS-ul in cazul asta nu te asista in nici un fel in directia asta, asta am zis. Pe Mongo il doare la basca ce stochezi tu in documente, cum relationezi tu in aplicatia ta documentele, etc.
Oricum, în acest moment nu înțeleg de ce acest lucru este un pas înainte.
Nu imi dau seama daca imi e adresat tot mie. Daca da, eu nu am pretins ca ar fi un pas in vreo directie.
PS: pentru ca threadul asta e strict legat de M101JS, hai sa nu incepem si aici discutiile pro si contra NoSQL, Mongo, etc, shall we?
Asa, daca mi se permite totusi sa discut si on-topic, am cateva tips pentru cei care s-au inscris la curs.
Pentru aia care folosesc Sublime, eu mi-am facut un build tool pentru .js-uri, care ruleaza fisierul curent in node, si cu alternative shortcut pentru a-l rula cu mongo. Este foarte folositor pentru rulat script-urile pentru mongo putin mai avansate mai incolo in curs:
In felul asta cu CTRL+B rulez un .js cu node, iar cu CTRL+SHIFT+B cu mongo. Spre finalul cursului, cand temele devin din ce in ce mai complicate, e obositor sa tot rulezi in consola scripturile.
By default, mongo incearca sa citeasca un fisier .mongorc.js din home, daca exista, in care ii pot fi configurate diverse chestii. Va recomand scriptul asta care vine cu cateva enhancements foarte nice pentru shell-ul de mongo: Mongo Hacker.
Pentru o posibila administrare a “blog-ului” cu siguranta trebuie puse intr-o alta colectie commenturile. Tag-urile de asemenea daca vrei sa faci tag clouds, cel putin asa mi se pare. Dar dupa cum spun si ei, pentru afisare le poti stoca la modul all in 1, in modul asta isi fac si reclama … 1 colectie in loc de 6 coloane in mysql