මිත්රවරුනි, තවත් පාඨමාලාවක් දියත් කිරීම
webinar පැවැත්විණි
MongoDB විශේෂාංග
MongoDB වගු ක්රමයේ විස්තරයක් අවශ්ය නොවන විවෘත මූලාශ්ර ලේඛන-නැඹුරු DBMS වේ. එය NoSQL ලෙස වර්ගීකරණය කර ඇති අතර BSON (ද්විමය JSON) භාවිතා කරයි. C++ වලින් ලියා ඇති කොටුවෙන් පිටත පරිමාණය කළ හැකි අතර JavaScript සින්ටැක්ස් සඳහා සහය දක්වයි. SQL ආධාරකයක් නොමැත.
MongoDB සතුව බොහෝ ජනප්රිය ක්රමලේඛන භාෂා (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, ආදිය) සඳහා ධාවක ඇත. වෙනත් ක්රමලේඛන භාෂා සඳහා නිල නොවන සහ ප්රජා සහාය දක්වන ධාවක ද ඇත.
හොඳයි, ප්රයෝජනවත් විය හැකි මූලික විධාන දෙස බලමු.
ඉතින්, ඩොකර් තුළ MongoDB යෙදවීමට, අපි ලියනවා:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
මේ අනුව එය සිදු වේ සේවාදායකයා දියත් කිරීම මොන්ගෝ ඩීබී:
දැන් අපි සම්ප්රදායික එක ලියමු හෙලෝ වර්ල්ඩ්:
print (“Hello world!”)
එයට පසු - අපි චක්රය ආරම්භ කරමු:
ඔබ දුටු පරිදි, අපට පෙර සාමාන්ය JS, සහ MongoDB යනු සම්පූර්ණ JavaScript පරිවර්තකයකි.
MongoDB භාවිතා කළ යුත්තේ කවදාද?
සිලිකන් නිම්නයේ සාමාන්ය ආරම්භකයකු සතියකට පෙර “HTML for Dummies” පොත විවෘත කළ පුද්ගලයා යැයි කතාවක් තිබේ. ඔහු තෝරා ගන්නේ කුමන තොගයද? පැහැදිලි හේතූන් මත, ඔහුගේ බ්රවුසරයේ ජාවාස්ක්රිප්ට් ඇති විට, Node.js සේවාදායකයේ ක්රියාත්මක වන විට සහ ජාවාස්ක්රිප්ට් දත්ත ගබඩාවේ ද ක්රියාත්මක වන විට එය ඔහුට ඉතා පහසු බව එකඟ වන්න. මෙය ලක්ෂ්ය අංක 1 වේ.
දෙවනුව, පවතී
තෙවනුව, මම MongoDB හොඳ ලක්ෂණ වලින් සංලක්ෂිත බව අවධාරණය කිරීමට කැමැත්තෙමි පරිමාණය - සහ මෙය දත්ත සමුදායේ ප්රධාන ලක්ෂණ වලින් එකකි. load එක මොකක්ද කියලා කලින්ම දන්නේ නැත්නම් MongoDB නියමයි. ඊට අමතරව, එය වැනි පෙට්ටියෙන් පිටත රටා සඳහා සහය දක්වයි බෙදීම и අනුකරණය, සහ මේ සියල්ල තරමක් විනිවිද පෙනෙන ලෙස සිදු කරනු ලැබේ, එනම්, එය වැඩ කිරීමට ඉතා පහසු වේ.
සම්බන්ධයෙන් පාරිභාෂිතය MongoDB හි එවිට:
- දත්ත සමුදායන් යනු දත්ත සමුදායන් (යෝජනා ක්රම, වගු එකතු කිරීම්);
- MongoDB වල එහෙම එකක් තියෙනවා එකතුව - මෙය වගුවක ප්රතිසමයක් සහ තර්කානුකූලව සම්බන්ධ කළ යුතු ලේඛන සමූහයකි;
- ලේඛන තන්තුවකට සමාන වේ.
දත්ත සමුදාය නිර්මාණය සහ සරල විමසුම්
දත්ත සමුදායක් නිර්මාණය කිරීම සඳහා, ඔබ එය භාවිතා කිරීම ආරම්භ කළ යුතුය:
use learn
දැන් අපි ලේඛනයේ කුඩා ඇතුල් කිරීමක් කරමු. උදාහරණයක් ලෙස, අරෝරා නම් යුනිකෝන් එකක් වේවා:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - දත්ත සමුදායට ප්රවේශ වීම සඳහා ගෝලීය වස්තුවක්, එනම් ඇත්ත වශයෙන්ම “මොංගා” ය. බෙදා හැරීම සඳහා භාවිතා වේ sh, අනුකරණය සඳහා - rs.
වස්තුවට ඇති විධාන මොනවාද? db:
එබැවින්, අපගේ විධානය වෙත ආපසු යමු, එහි ප්රතිඵලයක් ලෙස කොන්සෝලය එක් පේළියක් ඇතුළත් කර ඇති බව වාර්තා කරයි:
වචනය unicorns
කණ්ඩායමක db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
එකතුවක් දක්වයි. අපි එකතුව විස්තර කර හෝ නිර්මාණය නොකළ නමුත් සරලව ‘යුනිකෝන්’ ලියා, ඇතුළු කිරීමක් කළ අතර අපට එකතුවක් තිබූ බව කරුණාවෙන් සලකන්න.
ඒ වගේම අපිට පුළුවන් මෙහෙමයි අපගේ සියලුම එකතු කිරීම් ලබා ගන්න:
db.getCollectionNames()
සහ යනාදි. පුළුවන් තවත් එකක් ඇතුල් කරන්න එකතු:
දැන් අපි විමසමු සම්පූර්ණ එකතුව (අපගේ නඩුවේ දත්ත සමුදායේ එකම නම සහිත යුනිකෝන් දෙකක් පිළිබඳ තොරතුරු දැනටමත් අඩංගු බව අපි ඔබට මතක් කරමු):
db.unicorns.find()
කරුණාකර සටහන් කර ගන්න, මෙන්න අපේ JSON (නමක්, ස්ත්රී පුරුෂ භාවය, බර, යම් සුවිශේෂී වස්තු හඳුනාගැනීමක් ඇත):
දැන් අපි එකම නම් සහිත තවත් යුනිකෝන් කිහිපයක් ඇතුළත් කරමු:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
සහ අපි බලමු මොකද උනේ කියලා:
ඔබට පෙනෙන පරිදි, අපට අමතර ක්ෂේත්ර තිබේ: ගෙදර и පණුවා, Aurora සතුව නැති.
අපි තවත් යුනිකෝන් කිහිපයක් එකතු කරමු:
db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63},
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43},
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182},
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])
එබැවින්, අපි JavaScript භාවිතයෙන් තවත් වස්තු හතරක් ඇතුළත් කළෙමු:
ඔබගේ මතය අනුව, විදේශ ගමන් බලපත්ර දත්ත ගබඩා කිරීම වඩාත් පහසු වන්නේ කුමන දත්ත සමුදායන්හිද: සම්බන්ධතා දත්ත සමුදායන් හෝ මොංගෝ?
පිළිතුර පැහැදිලිය - මොන්ගා හි, ඉහත උදාහරණය මෙය හොඳින් පෙන්නුම් කරයි. KLADR රුසියානු සමූහාණ්ඩුවේ වේදනාවක් බව රහසක් නොවේ. තවද Monga ලිපින සමඟ ඉතා හොඳින් ගැලපේ, මන්ද ඔබට සෑම දෙයක්ම අරාවක් ලෙස සැකසිය හැකි අතර ජීවිතය වඩාත් පහසු වනු ඇත. ඒ වගේම ඒක හොඳ එකක් MongoDB සඳහා පරිශීලක නඩුව.
අපි තවත් යුනිකෝන් එකතු කරමු:
db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80});
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40});
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39});
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2});
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33});
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54});
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'});
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});
දැන් ලේඛන වෙත අවධානය යොමු කරන්න. පරිදි වයස අපි සම්පූර්ණ වස්තූන් ගබඩා කරමු. යුනිකෝන් ආදරය කරන දේ පිළිබඳ තොරතුරු ද ඇත, සෑම කෙනෙකුටම මෙම තොරතුරු නොමැත. ඉතින් ඇතුලේ බොරු සම්පූර්ණ අරාව.
මාර්ගය වන විට, ප්රතිඵල වඩාත් අලංකාර ලෙස ප්රදර්ශනය කිරීම සඳහා, ඔබට සෙවුම් විධානය අවසානයේ ක්රමය අමතන්න .pretty()
:
ඔබට ලබා ගැනීමට අවශ්ය නම් නවතම දෝෂය පිළිබඳ තොරතුරු, පහත විධානය භාවිතා කරන්න:
db.getLastError()
මෙය එක් එක් ඇතුළත් කිරීමෙන් පසුව සිදු කළ හැක, නැතහොත් ඔබට Write Concern වින්යාසගත කළ හැක. ඒ ගැන කියවීම වඩා හොඳය
අපි වඩාත් සංකීර්ණ විමසුම් වෙත යමු
නිශ්චිත ක්ෂේත්ර අගය සඳහා විමසුම:
db.unicorns.find({gender: 'm'})
එවැනි ඉල්ලීමක් ලිවීමෙන්, කොන්සෝල ප්රතිදානයේ ඇති සියලුම පිරිමි යුනිකෝන් ලැයිස්තුවක් අපට ලැබෙනු ඇත.
ඔබටත් කරන්න පුළුවන් එකවර ක්ෂේත්ර කිහිපයකින් විමසන්න: ස්ත්රී පුරුෂ භාවය සහ බර අනුව:
ඉහත, විශේෂ අවධානය යොමු කරන්න $gt තේරීම්කාරකය700 ට වඩා බරැති සියලුම පිරිමි යුනිකෝන් බෝ කිරීමට ඔබට ඉඩ සලසයි.
ඔබට පරීක්ෂා කළ හැකිය ක්ෂේත්රය කිසිසේත්ම පවතින්නේද?:
db.unicorns.find({vampires: {$exists: false}})
එසේ නැතහොත් එසේ
db.unicorns.find({'parents.father': {$exists: true}})
ඊළඟ කණ්ඩායම යුනිකෝන් පිටතට ගෙන එනු ඇත, ඔවුන්ගේ නම් A හෝ a අක්ෂර වලින් ආරම්භ වේ:
db.unicorns.find({name: {$regex: "^[Aa]"}})
දැන් අපි සලකා බලමු array search. ප්රශ්නය #1: මෙම විධානය ප්රතිදානය කරන්නේ කුමක්ද:
db.unicorns.find({loves:'apple'})
ඒක හරි: ඇපල් වලට ආදරය කරන හැමෝම.
පහත විධානය මඟින් යුනිකෝන් දත්ත පමණක් ලබා දෙනු ඇත ඇපල් සහ කොමඩු පමණි:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
සහ තවත් එක් විධානයක්:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
අපගේ නඩුවේදී, එය කිසිවක් ආපසු ලබා නොදෙනු ඇත, මන්ද අප අරාවක් පසු කරන විට, පළමු මූලද්රව්යය පළමු සමඟ, දෙවැන්න දෙවැන්න සමඟ සංසන්දනය කරයි. එනම්, අරාව ද ගැලපිය යුතුය. තනතුර අනුව මෙම අගයන්.
ඒවගේම මේකයි පේන්නෙ "OR" ක්රියාකරු භාවිතයෙන් අරාවක් හරහා සෙවීම:
පහත උදාහරණය අපට පෙන්වනු ඇත $all operator භාවිතයෙන් සොයන්න. මෙහි අනුපිළිවෙල වැදගත් නොවේ:
අපිටත් පුළුවන් අරා ප්රමාණය අනුව සොයන්න:
නමුත් එකකට වඩා විශාල අරාවක් සොයා ගැනීමට අපට අවශ්ය නම් කුමක් කළ යුතුද? මේ සඳහා ක්රියාකරුවෙක් සිටී $කොහේ, ඔබට වඩාත් සංකීර්ණ දේවල් ලිවිය හැකිය:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
මාර්ගය වන විට, ඔබට පුහුණු වීමට අවශ්ය නම්,
කර්සරයේ විශේෂාංග
අපි ටිකක් අපගමනය කර මොන්ගා හි විශේෂාංග ගැන වචන කිහිපයක් කියමු:
- find() සහ අනෙකුත් මෙහෙයුම් දත්ත ලබා නොදේ - ඔවුන් ඊනියා "කර්සරය" ලබා දෙයි;
- දත්ත මුද්රණය වන බව අපට පෙනෙන්නේ පරිවර්තකයාගේ කාර්යයයි.
ටයිප් කිරීම db.unicorns.find වරහන් නොමැතිව, අපට විමසුම ලැබේ:
අපි දිගටම ඉල්ලීම් ඉටු කරනවා
$in ක්රියාකරු ද ඇත:
db.unicorns.find({weight: {$in: [650, 704]}})
දැන් අපි යාවත්කාලීන කිරීම ගැන කතා කරමු. උදාහරණයක් ලෙස, Rooooodles යුනිකෝන් වල බර වෙනස් කරමු:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
අපගේ ක්රියාවන්ගේ ප්රතිඵලයක් ලෙස, ලේඛනය සම්පූර්ණයෙන්ම යාවත්කාලීන වනු ඇත, සහ එහි එක් නිශ්චිත ක්ෂේත්රයක් පමණක් පවතිනු ඇත:
එනම්, අපගේ වස්තුව සඳහා ඉතිරිව ඇති එකම දෙය බර 2222 සහ, ඇත්ත වශයෙන්ම, id වේ.
භාවිතයෙන් ඔබට තත්වය නිවැරදි කළ හැකිය $set:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
එය ද හැකි ය වර්ධක අගයන්:
ඒ වගේම තියෙනවා upsert - යාවත්කාලීන සහ ඇතුළත් කිරීමේ සංයෝජනය:
මෙන්න මෙහෙමයි ඒක කරන්නේ ක්ෂේත්ර තේරීම:
ගැන වචන කිහිපයක් එකතු කිරීමට ඉතිරිව ඇත ප්රොම්ප් и සීමාව:
සගයන්, ඔබට විස්තර දැන ගැනීමට අවශ්ය නම් එපමණයි,
මූලාශ්රය: www.habr.com