Theory
Event, document તરીકે
MongoDB માં FestConnect નું Garba Night એ table ની row નથી: એ document છે, એટલે કે JSON જેવું object જેને તમે લગભગ મોટેથી વાંચી શકો:
{ name: "Garba Night", seats: 350, online: false, tags: ["cultural", "dance"] }
name (string), seats (સંખ્યા), online (boolean), tags (એક array): દરેક field પોતાનો પ્રકાર સાથે લઈને ચાલે છે, અને આખી વસ્તુ BCA405-01 વાળા JavaScript ના objects જેવી જ દેખાય છે. આ પાઠ document માં કયા data ના પ્રકાર રહી શકે તે અને એમને સંઘરતું database કઈ રીતે બનાવવું તથા કાઢવું તે આવરી લે છે. પહેલાં શબ્દભંડોળ: databases માં collections રહે છે, અને collections માં documents રહે છે.
Theory
MongoDB નું માળખું અને types
MongoDB 3 સ્તર એકબીજામાં ગોઠવે છે: database માં collections રહે છે, અને collection માં documents (એટલે કે અલગ અલગ records) રહે છે.
Document નાં fields આ પ્રકારનાં હોઈ શકે:
- String:
"Garba Night" - Integer અને Double: પૂર્ણ સંખ્યાઓ અને દશાંશ સંખ્યાઓ (
350,49.5) - Boolean:
trueકેfalse - Array: યાદી સમાવતું field (
["cultural", "dance"]) - Object (અંદર ગોઠવેલું document): બીજું આખું document સમાવતું field
- સાથે ObjectId (આપોઆપ મળતું અનન્ય
_id), Date અને Null
અંદર object ગોઠવવાની આ ક્ષમતા શક્તિશાળી છે: event નું venue આખું ઉપ-document બનીને event ની અંદર જ બેસી શકે, કોઈ join ની જરૂર નહીં.
Practical
FestConnect ના event નું document (દરેક પ્રકાર)
// A single MongoDB document for one event:
{
name: "Garba Night", // String
seats: 350, // Integer
fee: 49.5, // Double
online: false, // Boolean
tags: ["cultural", "dance"], // Array
venue: { // Object (embedded document)
hall: "Main Ground",
capacity: 400
}
// _id: an ObjectId is added automatically if you do not supply one
}
// The venue is embedded INSIDE the event: no separate table, no join.
This example runs in Gri-Learn on the web, where you can edit it and see the output.
Theory
Database બનાવવું અને કાઢવું
Mongo ના shell માં તમે આ commands થી database સાથે કામ કરો છો:
- `use festdb`:
festdbdatabase પર જાઓ, અને એ આળસુ રીતે બની જાય. અગત્યની ઝીણી વાત: તમે એમાં data insert ન કરો ત્યાં સુધી database ખરેખર disk પર લખાતું નથી. સાવ નવા નામ પરuseકરવાથી એ ફક્ત તમને ત્યાં લઈ જાય છે - `show dbs`: હાજર databases ની યાદી આપે (આળસુ રીતે બનેલું ખાલી database હજી દેખાશે નહીં)
- `db.dropDatabase()`: ચાલુ database ને આખું ભૂંસી નાખે
આળસુ રચના નવા શીખનારાઓને ચોંકાવે છે: એ use newdb કરે, show dbs ચલાવે, અને એ ન દેખાય એટલે માની લે કે નિષ્ફળ ગયું. એવું નથી: પહેલું document એમાં પડે એ ક્ષણે database ખરેખર બની જાય છે.
Quiz
તમે હજી અસ્તિત્વમાં ન હોય એવા database ના નામ પર `use festdb` ચલાવો છો, પછી `show dbs` કરો છો, અને festdb યાદીમાં દેખાતું નથી. શા માટે?
- use નો command નિષ્ફળ ગયો
- MongoDB databases આળસુ રીતે બનાવે છે: તમે data insert ન કરો ત્યાં સુધી festdb disk પર લખાતું નથી, એટલે ત્યાં સુધી એ show dbs માં દેખાતું નથી
- તમારે પહેલાં createDatabase() ચલાવવું પડે
- Database નાં નામમાં અક્ષરો રાખી શકાતા નથી
Show the answer
MongoDB databases આળસુ રીતે બનાવે છે: તમે data insert ન કરો ત્યાં સુધી festdb disk પર લખાતું નથી, એટલે ત્યાં સુધી એ show dbs માં દેખાતું નથી
MongoDB databases (અને collections) આળસુ રીતે બનાવે છે: use festdb તમારો સંદર્ભ festdb પર બદલે છે અને એને તૈયાર કરે છે, પણ પહેલું document insert ન થાય ત્યાં સુધી એ ટકતું નથી કે યાદીમાં દેખાતું નથી. એટલે હમણાં જ use કરેલું ખાલી database show dbs માં ન દેખાય એ અપેક્ષિત છે, ભૂલ નથી. વિકલ્પ A સામાન્ય વર્તનને નિષ્ફળતા સમજી બેસે છે. વિકલ્પ C એક ઉપજાવેલો command છે: createDatabase() જેવું કશું છે જ નહીં; use અને insert થી જ database અસ્તિત્વમાં આવે છે. વિકલ્પ D ખોટો છે. યાદ રાખવાનો નિયમ: use તમને database પર લઈ જાય છે (અને એને આળસુ રીતે બનાવે છે), અને એમાં data પડે એટલે એ ખરેખર અસ્તિત્વમાં આવે છે.
Think first
અંદર ગોઠવેલું object કે અલગ collection?
FestConnect ના event પાસે hall નું નામ અને ક્ષમતા વાળું venue છે. તમે venue ને event ના document ની અંદર ગોઠવી શકો, અથવા venues ને અલગ collection માં સંઘરી શકો. અંદર ગોઠવવું ક્યારે જીતે છે? વિચારીને પછી tap કરો.
Show the answer
Venue ને event ની અંદર ત્યારે ગોઠવો જ્યારે venue નો data એ જ event નો હોય અને એની સાથે જ વપરાતો હોય: અહીં સામાન્ય રીતે એવું જ છે. અંદર ગોઠવવાનો અર્થ એ કે એક જ document વાંચતાં event અને એનું venue બંને મળી જાય, કોઈ join વગર: ઝડપી અને સાદું, અને MongoDB ના document ના model સાથે બંધબેસતું. એને બદલે અલગ collection ત્યારે વાપરો જ્યારે એ જ venue ઘણા events વચ્ચે વહેંચાયેલું હોય અને તમારે એને એક જ જગ્યાએ બદલવું હોય (દરેક event માં venue ની વિગતોની નકલ ટાળવા), કે પછી venue નો data મોટો હોય અને ભાગ્યે જ જોઈતો હોય. અંદર ગોઠવવું કે સંદર્ભ આપવો એ નિર્ણય MongoDB નું normalise સામે denormalise વાળા ભોગનું રૂપ છે: સાથે વપરાતો અને પિતાની માલિકીનો data અંદર ગોઠવો, વહેંચાયેલો કે સ્વતંત્ર રીતે બદલાતો data સંદર્ભથી જોડો.
Watch out
MongoDB ના પાયાના ફાંદા
ખાલી database દેખાશે એવી અપેક્ષા: use આળસુ રીતે બનાવે છે; data insert થયા પછી જ database દેખાય છે.
createDatabase() શોધવું: એવું કશું છે જ નહીં; use અને insert થી જ એ બને છે.
આપોઆપ મળતું _id ભૂલી જવું: તમે પોતાનું ન આપો ત્યાં સુધી દરેક document ને અનન્ય ObjectId વાળું _id મળે છે.
dropDatabase() ચાલુ database કાઢે છે: કાઢતાં પહેલાં ખાતરી કરો કે તમે સાચા database પર છો (db થી તપાસો): એ પાછું ફેરવી શકાતું નથી.
database, collection અને document ગૂંચવવાં: database માં collections હોય છે અને collections માં documents (records) હોય છે.
Theory
Database તૈયાર; હવે collections
તમે event ને પ્રકાર ધરાવતા document તરીકે ઘડી શકો છો અને festdb database બનાવી કે કાઢી શકો છો. Documents COLLECTIONS ની અંદર રહે છે (જે લગભગ tables ની સમકક્ષ છે), એટલે પછીનો ટૂંકો પાઠ collections બનાવવાં અને કાઢવાં આવરી લે છે, અને પછી આવે છે unit નું હૃદય: CRUD ની ક્રિયાઓ (insert, find, update, delete) અને query તથા projection ના operators, જે MongoDB ને FestConnect માટે ખરેખર ઉપયોગી બનાવે છે.
Summary
Key takeaways
- MongoDB નું માળખું: database માં collections રહે છે, collection માં documents (JSON જેવા records) રહે છે.
- Document ના fields ના પ્રકાર: String, Integer, Double, Boolean, Array, Object (અંદર ગોઠવેલું document), સાથે ObjectId, Date, Null.
- અંદર ગોઠવેલાં objects સંબંધિત data (venue) ને document ની અંદર જ બેસાડે છે: કોઈ join ની જરૂર નહીં.
- તમે પોતાનું ન આપો ત્યાં સુધી દરેક document ને આપોઆપ અનન્ય _id (ObjectId) મળે છે.
- use dbname database પર લઈ જાય છે (અને એને આળસુ રીતે બનાવે છે); data insert ન થાય ત્યાં સુધી એ ટકતું નથી.
- db.dropDatabase() ચાલુ database ભૂંસી નાખે છે (પાછું ફેરવી ન શકાય: તમે સાચા database પર છો કે નહીં તે તપાસો).
- યાદ રાખવાની કડી: documents એટલે પ્રકાર ધરાવતું JSON; use આળસુ રીતે બનાવે છે, અને data એને ખરું બનાવે છે.