{"id":277,"date":"2016-07-22T20:57:29","date_gmt":"2016-07-22T18:57:29","guid":{"rendered":"http:\/\/localhost:8888\/wordpress\/?p=277"},"modified":"2016-07-22T20:57:29","modified_gmt":"2016-07-22T18:57:29","slug":"mongodb-tutustumista","status":"publish","type":"post","link":"https:\/\/www.pilvikoodari.net\/?p=277","title":{"rendered":"MongoDB tutustumista"},"content":{"rendered":"<p>SQL-tietokantojen rinnalle on tullut viime vuosina eritt\u00e4in voimakkaasti ns. NoSQL -tietokannat. Niiss\u00e4 on etuna mm. suorituskyky kovan volyymin tietojenk\u00e4sittelyss\u00e4, joustavuus tietorakenteen muuttuessa sek\u00e4 suora tuki JSON formaatille. Toisaalta k\u00e4yt\u00f6ss\u00e4 ei ole esim. viiteavaimia tai join-kyselyj\u00e4.<\/p>\n<p>T\u00e4ss\u00e4 postauksessa ei aleta esittelem\u00e4\u00e4n NoSQL -tietokantojen periaatteita laajasti vaan tutustutaan yhteen NoSQL -tietokantaan k\u00e4yt\u00e4nn\u00f6ss\u00e4 ottamalla k\u00e4ytt\u00f6\u00f6n MongoDB -tietokanta ja kokeilemalla muutamia operaatioita. NoSQL-tietokantojen periaatteisiin voi tutustua esim. alla olevan linkin kautta:<br \/>\n<a href=\"https:\/\/www.mongodb.com\/nosql-explained\" target=\"_blank\">https:\/\/www.mongodb.com\/nosql-explained<\/a><\/p>\n<p>MongoDB tietokannan hyv\u00e4t\u00a0manuaalit l\u00f6ytyv\u00e4t osoitteesta <a href=\"https:\/\/docs.mongodb.com\/manual\/\" target=\"_blank\">https:\/\/docs.mongodb.com\/manual\/<\/a><\/p>\n<p><strong>MongoDB tietokannan perustaminen pilveen<br \/>\n<\/strong><\/p>\n<p>Pilvikoodarin blogissa MongoDB tietokanta halutaan perustaa suoraan pilveen. Vaihtoehtona olisi tietysti asentaa tietokantamoottori omalle koneelle ja kokeilla sit\u00e4 paikallisesti mutta silloin sit\u00e4 ei olisi helppo k\u00e4ytt\u00e4\u00e4 pilveen toteutetusta sovelluksesta k\u00e4sin.<\/p>\n<p>Valitsemme MongoDB tietokantapalvelun tarjoajaksi <a href=\"https:\/\/mlab.com\/\" target=\"_blank\">mlab.com<\/a> palvelun joka tarjoaa tarvittaessa j\u00e4reit\u00e4kin MongoDB ratkaisuja mutta tarjoaa my\u00f6s mahdollisuuden perustaa yhden ilmaisen MongoDB -tietokannan joka toimii pilvipalveluna. Ilmaisen tietokannan maksimikoko on 0,5 Gt.<\/p>\n<p>Perustaminen l\u00e4htee osoitteeesta https:\/\/mlab.com\/ josta valitaan hostausymp\u00e4rist\u00f6: AWS \/ Azure \/ Google. Valitsemme ymp\u00e4rist\u00f6ksi Azuren, jolloin siirryt\u00e4\u00e4n osoitteeseen <a href=\"https:\/\/mlab.com\/azure\/\" target=\"_blank\">https:\/\/mlab.com\/azure\/<\/a>. Siell\u00e4 valitaan plan eli millaisella setupilla l\u00e4hdet\u00e4\u00e4n perustamaan tietokantaa:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_plan_selection.jpg\" rel=\"attachment wp-att-282\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-282\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_plan_selection-300x138.jpg\" alt=\"mlab_plan_selection\" width=\"450\" height=\"206\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_plan_selection-300x138.jpg 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_plan_selection.jpg 628w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><\/p>\n<p>Valitsemme siis ilmaisen Sandbox -tyyppisen planin.<\/p>\n<p>Seuraavaksi tullaan rekister\u00f6itymislomakkeelle:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_signup.jpg\" rel=\"attachment wp-att-284\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-284\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_signup.jpg\" alt=\"mlab_signup\" width=\"400\" height=\"492\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_signup.jpg 446w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_signup-244x300.jpg 244w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>Kun tunnnus\u00a0 on luotu, n\u00e4ytet\u00e4\u00e4nkin jo k\u00e4ytt\u00e4j\u00e4n aloitussivu. Ensimm\u00e4iseksi pit\u00e4\u00e4 vahvistaa s\u00e4hk\u00f6postiosoite ennen kuin pystyy tekem\u00e4\u00e4n mit\u00e4\u00e4n:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_first_login_.jpg\" rel=\"attachment wp-att-285\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-285 size-large\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_first_login_-1024x232.jpg\" alt=\"mlab_first_login_\" width=\"1024\" height=\"232\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_first_login_-1024x232.jpg 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_first_login_-300x68.jpg 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_first_login_-768x174.jpg 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_first_login_.jpg 1231w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Kun s\u00e4hk\u00f6posti on vahvistettu, aktivoituvat toiminnot ja p\u00e4\u00e4semme perustamaan uutta tietokantaa:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_account_activated.jpg\" rel=\"attachment wp-att-287\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-287\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_account_activated.jpg\" alt=\"mlab_account_activated\" width=\"318\" height=\"63\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_account_activated.jpg 318w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_account_activated-300x59.jpg 300w\" sizes=\"auto, (max-width: 318px) 100vw, 318px\" \/><\/a><\/p>\n<p>Valitsemme Create new ja p\u00e4\u00e4semme perustamaan uutta tietokantaa:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_create_db.jpg\" rel=\"attachment wp-att-289\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-289\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_create_db.jpg\" alt=\"mlab_create_db\" width=\"460\" height=\"579\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_create_db.jpg 697w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_create_db-238x300.jpg 238w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/a>Valitsemme palveluntarjoajaksi Azuren, sijainniksi North Europe (Dublin), ilmaisen single-noden, sek\u00e4 sy\u00f6t\u00e4mme tietokannan nimen. Hintana n\u00e4kyy nolla dollaria per kuukausi \ud83d\ude42<\/p>\n<p>Tietokanta on ajossa heti perustamisen j\u00e4lkeen:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_running.jpg\" rel=\"attachment wp-att-292\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-292\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_running-1024x200.jpg\" alt=\"mlab_running\" width=\"1024\" height=\"200\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_running-1024x200.jpg 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_running-300x58.jpg 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_running-768x150.jpg 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_running.jpg 1103w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Klikkaamalla rivi\u00e4 p\u00e4\u00e4st\u00e4\u00e4n katsomaan tarkempia tietoja:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_details-1.jpg\" rel=\"attachment wp-att-295\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-295\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_details-1-1024x551.jpg\" alt=\"mlab_details\" width=\"1024\" height=\"551\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_details-1-1024x551.jpg 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_details-1-300x162.jpg 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_details-1-768x414.jpg 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/06\/mlab_details-1.jpg 1116w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>N\u00e4yt\u00f6ll\u00e4 kehoitetaan luomaan tietokantaan k\u00e4ytt\u00e4j\u00e4 joten luodaan yksi k\u00e4ytt\u00e4j\u00e4 ja sille salasana.<\/p>\n<p>Nyt tietokantaan voidaan ottaa yhteys k\u00e4ytt\u00e4m\u00e4ll\u00e4 sivulla n\u00e4kyv\u00e4\u00e4 tietokanta-urlia.<\/p>\n<p><strong>NoSQL tietokannan kokeilua<\/strong><\/p>\n<p>Kokeilemme seuraavaksi perustettua tietokantaa muutamilla operaatioilla.<\/p>\n<p>Tarvitsemme kokeiluun editoria, jolla voimme suorittaa komentoja tietokantaan. Asennamme siksi omalle koneelle MongoDB paketin osoitteesta <a href=\"https:\/\/www.mongodb.com\/download-center\" target=\"_blank\">https:\/\/www.mongodb.com\/download-center<\/a>.<\/p>\n<p>Asennuksessa voidaan asentaa my\u00f6s palvelin mutta tarvitsemme toistaiseksi vain clientin. Lis\u00e4tietoja asennuksesta omalle koneelle t\u00e4\u00e4lt\u00e4: <a href=\"https:\/\/docs.mongodb.com\/manual\/tutorial\/install-mongodb-on-windows\/\" target=\"_blank\">https:\/\/docs.mongodb.com\/manual\/tutorial\/install-mongodb-on-windows\/<\/a><\/p>\n<p>Asennuspaketista asennamme siis nyt vain client-osuuden:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_install_client.jpg\" rel=\"attachment wp-att-301\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-301\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_install_client.jpg\" alt=\"mongodb_install_client\" width=\"495\" height=\"387\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_install_client.jpg 495w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_install_client-300x235.jpg 300w\" sizes=\"auto, (max-width: 495px) 100vw, 495px\" \/><\/a><\/p>\n<p>Kun client (mongo.exe) on asennettu, voidaan ottaa yhteys tietokantaan:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_mongo_connect.jpg\" rel=\"attachment wp-att-311\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-311\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_mongo_connect.jpg\" alt=\"mongodb_mongo_connect\" width=\"979\" height=\"514\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_mongo_connect.jpg 979w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_mongo_connect-300x158.jpg 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2016\/07\/mongodb_mongo_connect-768x403.jpg 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/a><\/p>\n<p>Tietoturvasyist\u00e4 olen sensuroinut osan komentokehotteen tekstist\u00e4, mutta komentoriville annetaan esimerkiksi komento<\/p>\n<pre class=\"nums:false lang:dos decode:true\">mongo ds30470.mlab.com:30470\/pilvikoodari -u admin -p adminpassu<\/pre>\n<p>Sitten p\u00e4\u00e4st\u00e4\u00e4n itse asiaan eli komentamaan tietokantaa.<\/p>\n<p>Esimerkiksi t\u00e4\u00e4lt\u00e4 saa esimerkki\u00e4, miten SQL lauseita vastaavat operaatiot tehd\u00e4\u00e4n MongoDB-tietokantaan: <a href=\"https:\/\/docs.mongodb.com\/manual\/reference\/sql-comparison\/\" target=\"_blank\">https:\/\/docs.mongodb.com\/manual\/reference\/sql-comparison\/<\/a><\/p>\n<p>Kokoelmaa (collection, SQL:ss\u00e4 vastine on taulu) ei tarvitse erikseen perustaa vaan ne perustuvat samalla kun ensimm\u00e4isen kerran insertoidaan. Kokeillaan insertoida yksi dokumentti:<\/p>\n<pre class=\"nums:false lang:js decode:true\">db.kayttajat.insert( { nimi : \"Esko Ensimm\u00e4inen\", syntvuosi : 1975 } )<\/pre>\n<p>vastauksena saadaan:<\/p>\n<pre class=\"nums:false lang:js decode:true \">WriteResult({ \"nInserted\" : 1 })<\/pre>\n<p>Tehd\u00e4\u00e4n haku:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.find()\r\n\r\n{ \"_id\" : ObjectId(\"5792487349f592026400dbf4\"), \"username\" : \"Esko Ensimm\u00e4inen\", \"year\" : 1975 }\r\n<\/pre>\n<p>Eli dokumentti palautui JSON muodossa. MongoDB generoi automaattisesti jokaiselle dokumentille id:n.<\/p>\n<p>Tehd\u00e4\u00e4n viel\u00e4 muutama kokeiluluontoinen komento.<\/p>\n<p>Kokoelmien listaus:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; show collections\r\nkayttajat\r\nsystem.indexes<\/pre>\n<p>Kokoelman droppaus:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.drop()\r\ntrue\r\n&gt; show collections\r\nsystem.indexes\r\n<\/pre>\n<p>Lis\u00e4t\u00e4\u00e4n kolme dokumenttia ja haetaan suurempi kuin -operaattorilla:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.insert( { nimi : \"Esko Ensimm\u00e4inen\", syntvuosi : 1975 } )\r\nWriteResult({ \"nInserted\" : 1 })\r\n&gt; db.kayttajat.insert( { nimi : \"Teppo Toinen\", syntvuosi : 1980 } )\r\nWriteResult({ \"nInserted\" : 1 })\r\n&gt; db.kayttajat.insert( { nimi : \"Kalle Kolmas\", syntvuosi : 1990 } )\r\nWriteResult({ \"nInserted\" : 1 })\r\n<\/pre>\n<pre class=\"nums:false lang:js decode:true \">db.kayttajat.find( { syntvuosi : {$gt : 1985} })\r\n{ \"_id\" : ObjectId(\"5792537d49f592026400dbfa\"), \"nimi\" : \"Kalle Kolmas\", \"syntvuosi\" : 1990 }\r\n<\/pre>\n<p>Indeksin luonti:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.createIndex( { syntvuosi : 1 } )\r\n{\r\n        \"createdCollectionAutomatically\" : false,\r\n        \"numIndexesBefore\" : 1,\r\n        \"numIndexesAfter\" : 2,\r\n        \"ok\" : 1\r\n}<\/pre>\n<p>Lis\u00e4t\u00e4\u00e4n kaikille dokumenteille kentt\u00e4 &#8221;varmistettu&#8221; ja asetetaan olemassa oleville dokumenteille arvoksi false:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.update( {}, { $set: { varmistettu : false } },  {multi : true}  )\r\nWriteResult({ \"nMatched\" : 3, \"nUpserted\" : 0, \"nModified\" : 3 })\r\n\r\n&gt; db.kayttajat.find()\r\n{ \"_id\" : ObjectId(\"5792535f49f592026400dbf8\"), \"nimi\" : \"Esko Ensimm\u00e4inen\", \"syntvuosi\" : 1975, \"varmistettu\" : false }\r\n{ \"_id\" : ObjectId(\"5792536a49f592026400dbf9\"), \"nimi\" : \"Teppo Toinen\", \"syntvuosi\" : 1980, \"varmistettu\" : false }\r\n{ \"_id\" : ObjectId(\"5792537d49f592026400dbfa\"), \"nimi\" : \"Kalle Kolmas\", \"syntvuosi\" : 1990, \"varmistettu\" : false }\r\n<\/pre>\n<p>Poistetaan &#8221;varmistettu&#8221; -niminen kentt\u00e4:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.update( {}, { $unset: { varmistettu : false } },  {multi : true}  )\r\nWriteResult({ \"nMatched\" : 3, \"nUpserted\" : 0, \"nModified\" : 3 })\r\n\r\n&gt; db.kayttajat.find()\r\n{ \"_id\" : ObjectId(\"5792535f49f592026400dbf8\"), \"nimi\" : \"Esko Ensimm\u00e4inen\", \"syntvuosi\" : 1975 }\r\n{ \"_id\" : ObjectId(\"5792536a49f592026400dbf9\"), \"nimi\" : \"Teppo Toinen\", \"syntvuosi\" : 1980 }\r\n{ \"_id\" : ObjectId(\"5792537d49f592026400dbfa\"), \"nimi\" : \"Kalle Kolmas\", \"syntvuosi\" : 1990 }\r\n<\/pre>\n<p>Haetaan vain syntym\u00e4vuosi-kentt\u00e4 ja sortataan sill\u00e4:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.find( {} , { syntvuosi:1} ).sort( {syntvuosi : 1})\r\n{ \"_id\" : ObjectId(\"5792535f49f592026400dbf8\"), \"syntvuosi\" : 1975 }\r\n{ \"_id\" : ObjectId(\"5792536a49f592026400dbf9\"), \"syntvuosi\" : 1980 }\r\n{ \"_id\" : ObjectId(\"5792537d49f592026400dbfa\"), \"syntvuosi\" : 1990 }\r\n\r\n&gt; db.kayttajat.find( {} , { syntvuosi:1} ).sort( {syntvuosi : -1})\r\n{ \"_id\" : ObjectId(\"5792537d49f592026400dbfa\"), \"syntvuosi\" : 1990 }\r\n{ \"_id\" : ObjectId(\"5792536a49f592026400dbf9\"), \"syntvuosi\" : 1980 }\r\n{ \"_id\" : ObjectId(\"5792535f49f592026400dbf8\"), \"syntvuosi\" : 1975 }<\/pre>\n<p>Find haku regural expression ehdolla:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.find( {nimi : \/eppo\/})\r\n{ \"_id\" : ObjectId(\"5792536a49f592026400dbf9\"), \"nimi\" : \"Teppo Toinen\", \"syntvuosi\" : 1980 }\r\n<\/pre>\n<p>Poistetaan k\u00e4ytt\u00e4j\u00e4t joiden syntvuosi &gt; 1985:<\/p>\n<pre class=\"nums:false lang:js decode:true \">&gt; db.kayttajat.remove({syntvuosi : {$gt: 1985} })\r\nWriteResult({ \"nRemoved\" : 1 })\r\n\r\n&gt; db.kayttajat.find()\r\n{ \"_id\" : ObjectId(\"5792535f49f592026400dbf8\"), \"nimi\" : \"Esko Ensimm\u00e4inen\", \"syntvuosi\" : 1975 }\r\n{ \"_id\" : ObjectId(\"5792536a49f592026400dbf9\"), \"nimi\" : \"Teppo Toinen\", \"syntvuosi\" : 1980 }\r\n<\/pre>\n<p><b>Node.js ja MongoDB<\/b><\/p>\n<p>Tehd\u00e4\u00e4n viel\u00e4 lopuksi simppeli Node-ohjelma, joka ottaa yhteyden MongoDB tietokantaan ja tulostaa kokoelman &#8221;kayttajat&#8221; sis\u00e4ll\u00f6n.<\/p>\n<p>Aivan aluksi haetaan npm:ll\u00e4 mongodb:<\/p>\n<pre class=\"nums:false lang:dos decode:true\">\r\nC:\\nodejs>npm install mongodb --save\r\nmongodb@2.2.4 node_modules\\mongodb\r\n\u251c\u2500\u2500 es6-promise@3.0.2\r\n\u251c\u2500\u2500 readable-stream@1.0.31 (isarray@0.0.1, inherits@2.0.1, string_decoder@0.10.31, core-util-is@1.0.2)\r\n\u2514\u2500\u2500 mongodb-core@2.0.6 (bson@0.5.2, require_optional@1.0.0)\r\n<\/pre>\n<p>Sitten koodataan simppeli ohjelma joka ottaa tietokantayhteyden ja listaa kokoelman &#8221;kayttajat&#8221; sis\u00e4ll\u00f6n:<\/p>\n<pre title=\"connect_and_print_users.js\" class=\"lang:js decode:true\">\r\nvar client = require('mongodb').MongoClient;\r\n\r\n\/\/ Otetaan yhteys tietokantaan\r\n\/\/ HUOM! T\u00c4M\u00c4 DB URL EI OLE K\u00c4YT\u00d6SS\u00c4!\r\nclient.connect(\"mongodb:\/\/admin:adminpasssu@ds30470.mlab.com:30470\/pilvikoodari\", function(err, db) {\r\n    if(!err) {\r\n        console.log(\"Connected.\");\r\n\r\n        \/\/ haetaan kaikki k\u00e4ytt\u00e4j\u00e4t taulukkoon\r\n        findUsers(db, function(users) {\r\n            console.log(\"Fetched following users:\");\r\n            console.log(users);\r\n            db.close();\r\n        } )\r\n        \r\n    } else {\r\n        \/\/ yhteys ei onnistunut\r\n        console.log(err);\r\n    }\r\n});\r\n\r\nvar findUsers = function(db, callback) {\r\n\r\n    var collection = db.collection('kayttajat');\r\n\r\n    collection.find({}).toArray(function(err, users) {\r\n        callback(users);\r\n    });\r\n}\r\n<\/pre>\n<p>Ajetaan ohjelma:<\/p>\n<pre class=\"nums:false lang:default decode:true\">\r\nC:\\nodejs\\projects\\mongodb_test>node connect_and_print_users.js\r\nConnected.\r\nFetched following users:\r\n[ { _id: 5792535f49f592026400dbf8,\r\n    nimi: 'Esko Ensimm\u00e4inen',\r\n    syntvuosi: 1975 },\r\n  { _id: 5792536a49f592026400dbf9,\r\n    nimi: 'Teppo Toinen',\r\n    syntvuosi: 1980 } ]\r\n\r\nC:\\nodejs\\projects\\mongodb_test>\r\n<\/pre>\n<p>T\u00e4ss\u00e4 postauksessa perustimme pilveen MongoDB tietokannan, kokeilimme hieman MongoDB:n syntaksin k\u00e4ytt\u00f6\u00e4 ja lopulta teimme simppelin Node-ohjelman joka otti tietokantaan yhteyden. <\/p>\n<p>MongoDB:n tiimoilta voisi kirjoittaa muitakin postauksia mongoDB:n todellisesta k\u00e4yt\u00f6st\u00e4 Noden kanssa. Saattaa olla  ett\u00e4 palaamme asiaan \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SQL-tietokantojen rinnalle on tullut viime vuosina eritt\u00e4in voimakkaasti ns. NoSQL -tietokannat. Niiss\u00e4 on etuna mm. suorituskyky kovan volyymin tietojenk\u00e4sittelyss\u00e4, joustavuus tietorakenteen muuttuessa sek\u00e4 suora tuki JSON formaatille. Toisaalta k\u00e4yt\u00f6ss\u00e4 ei ole esim. viiteavaimia tai join-kyselyj\u00e4. T\u00e4ss\u00e4 postauksessa ei aleta esittelem\u00e4\u00e4n NoSQL -tietokantojen periaatteita laajasti vaan tutustutaan yhteen NoSQL -tietokantaan k\u00e4yt\u00e4nn\u00f6ss\u00e4 ottamalla k\u00e4ytt\u00f6\u00f6n MongoDB -tietokanta ja &#8230; <a title=\"MongoDB tutustumista\" class=\"read-more\" href=\"https:\/\/www.pilvikoodari.net\/?p=277\" aria-label=\"Lue lis\u00e4\u00e4 aiheesta MongoDB tutustumista\">Lue lis\u00e4\u00e4<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,10,13,6,5],"tags":[],"class_list":["post-277","post","type-post","status-publish","format-standard","hentry","category-azure","category-json","category-mongodb","category-node-js","category-pilvialustat"],"_links":{"self":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts\/277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=277"}],"version-history":[{"count":38,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts\/277\/revisions"}],"predecessor-version":[{"id":329,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts\/277\/revisions\/329"}],"wp:attachment":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}