{"id":10372,"date":"2023-08-25T12:21:01","date_gmt":"2023-08-25T17:21:01","guid":{"rendered":"https:\/\/www.rushworth.us\/lisa\/?p=10372"},"modified":"2023-09-06T13:36:06","modified_gmt":"2023-09-06T18:36:06","slug":"mongodb-basics","status":"publish","type":"post","link":"https:\/\/www.rushworth.us\/lisa\/?p=10372","title":{"rendered":"MongoDB: Basics"},"content":{"rendered":"<p>We inherited a system that uses MongoDB, and I managed to get the sandbox online without actually learning anything about Mongo. The other environments, though, have data people care about set up in a replicated cluster of database servers. That seems like the sort of thing that&#8217;s going to require knowing more than &#8220;it&#8217;s a NoSQL database of some sort&#8221;.<\/p>\n<p>It <em>is<\/em> a NoSQL database &#8212; documents are organized into &#8216;collections&#8217; within the database. You can have multiple databases hosted on a server, too. A document is a group of key\/value pairs with dynamic schema (i.e. you can just make up keys as you go).<\/p>\n<p>There are GUI clients and a command-line shell &#8230; of course I&#8217;m going with the shell \ud83d\ude42 There is a db function for basic CRUD operations using db.<em>nameOfCollection<\/em> then the operation type:<\/p>\n<pre class=\"oy oz pa pb pc pd pe pf pg ax ph bj\"><span class=\"nq mt fo pe b ho pi pj l ie pk\" data-selectable-paragraph=\"\">db.collectionName.insert({\"key1\": \"string1\", \"key2\" : false, \"key3\": 12345})\r\n<\/span><\/pre>\n<pre class=\"oy oz pa pb pc pd pe pf pg ax ph bj\"><span id=\"d04a\" class=\"nq mt fo pe b ho pi pj l ie pk\" data-selectable-paragraph=\"\">db.collectionName.find({key3 : {$gt : 10000} })<\/span><\/pre>\n<pre class=\"oy oz pa pb pc pd pe pf pg ax ph bj\"><span id=\"b4fb\" class=\"nq mt fo pe b ho pi pj l ie pk\" data-selectable-paragraph=\"\">db.collectionName.update({key1 : \"string1\"}, {$set: {key3: 100}})<\/span><\/pre>\n<pre class=\"oy oz pa pb pc pd pe pf pg ax ph bj\"><span id=\"6c94\" class=\"nq mt fo pe b ho pi pj l ie pk\" data-selectable-paragraph=\"\">db.collectionName.remove({key1: \"string1\"});<\/span><span id=\"fab9\" class=\"nq mt fo pe b ho pi pj l ie pk\" data-selectable-paragraph=\"\"><\/span><\/pre>\n<p>CRUD operations can also be performed with NodeJS code &#8212; create a file with the script you want to run, then run &#8220;node myfile.js&#8221;<\/p>\n<p>Create a document in a collection<\/p>\n<pre><span class=\"jscolor\"><span class=\"jskeywordcolor\">var<\/span> objMongoClient = require(<span class=\"jsstringcolor\">'mongodb'<\/span>).<span class=\"jspropertycolor\">MongoClient<\/span>;\r\n<span class=\"jskeywordcolor\">var<\/span> strMongoDBURI = <span class=\"jsstringcolor\">\"mongodb:\/\/mongodb.example.com:27017\/\"<\/span>;\r\n  \r\nobjMongoClient.<span class=\"jspropertycolor\">connect<\/span>(strMongoDBURI, <span class=\"jskeywordcolor\">function<\/span>(err, db) {\r\n\u00a0 <span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n\u00a0   <span class=\"jskeywordcolor\">var<\/span> dbo = db.<span class=\"jspropertycolor\">db<\/span>(<span class=\"jsstringcolor\">\"dbNameToSelect\"<\/span>);\r\n\u00a0   <span class=\"jskeywordcolor\">var<\/span> objRecord = { key1: <span class=\"jsstringcolor\">\"String Value1\"<\/span>, key2: <span class=\"jsstringcolor\">false<\/span> };\r\n  \u00a0 dbo.<span class=\"jspropertycolor\">collection<\/span>(<span class=\"jsstringcolor\">\"collectionName\"<\/span>).<span class=\"jspropertycolor\">insertOne<\/span>(objRecord, <span class=\"jskeywordcolor\">function<\/span>(err, res) {\r\n         <span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n     \u00a0\u00a0\u00a0 console.<span class=\"jspropertycolor\">log<\/span>(<span class=\"jsstringcolor\">\"document inserted\"<\/span>);\r\n     \u00a0\u00a0\u00a0 db.<span class=\"jspropertycolor\">close<\/span>();\r\n    });\r\n}); <\/span><\/pre>\n<p>Read a document in a collection<\/p>\n<pre><span class=\"jscolor\"><span class=\"jskeywordcolor\">var<\/span> objMongoClient = require(<span class=\"jsstringcolor\">'mongodb'<\/span>).<span class=\"jspropertycolor\">MongoClient<\/span>;\r\n<span class=\"jskeywordcolor\">var<\/span> strMongoDBURI = <span class=\"jsstringcolor\">\"mongodb:\/\/mongodb.example.com:27017\/\"<\/span>;\r\n\r\nobjMongoClient.<span class=\"jspropertycolor\">connect<\/span>(strMongoDBURI, <span class=\"jskeywordcolor\">function<\/span>(err, db) {\r\n  <span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n\u00a0   <span class=\"jskeywordcolor\">var<\/span> dbo = db.<span class=\"jspropertycolor\">db<\/span>(<span class=\"jsstringcolor\">\"dbNameToSelect\"<\/span>);\r\n  \u00a0 <span class=\"jskeywordcolor\">var<\/span> objQuery = { key1: <span class=\"jsstringcolor\">\"String Value 1\"<\/span> };<strong>\r\n<\/strong>  \u00a0 dbo.<span class=\"jspropertycolor\">collection<\/span>(<span class=\"jsstringcolor\">\"collectionName\"<\/span>).<span class=\"jspropertycolor\">find<\/span>(objQuery).<span class=\"jspropertycolor\">toArray<\/span>(<span class=\"jskeywordcolor\">function<\/span>(err, result) {\r\n \u00a0 \u00a0 <span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n \u00a0\u00a0  console.<span class=\"jspropertycolor\">log<\/span>(result);\r\n \u00a0\u00a0  db.<span class=\"jspropertycolor\">close<\/span>();\r\n  });\r\n}); <\/span><\/pre>\n<p>Update a document in a collection<\/p>\n<pre><span class=\"jscolor\"><span class=\"jskeywordcolor\">var<\/span> objMongoClient = require(<span class=\"jsstringcolor\">'mongodb'<\/span>).<span class=\"jspropertycolor\">MongoClient<\/span>;\r\n<span class=\"jskeywordcolor\">var<\/span> strMongoDBURI = <span class=\"jsstringcolor\">\"mongodb:\/\/mongodb.example.com:27017\/\"<\/span>;\r\n\r\nobjMongoClient.<span class=\"jspropertycolor\">connect<\/span>(strMongoDBURI, <span class=\"jskeywordcolor\">function<\/span>(err, db) {\r\n<span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n\u00a0 <span class=\"jskeywordcolor\">var<\/span> dbo = db.<span class=\"jspropertycolor\">db<\/span>(<span class=\"jsstringcolor\">\"dbNameToSelect\"<\/span>);\r\n\u00a0 <span class=\"jskeywordcolor\">var<\/span> objRecord= { key1: <span class=\"jsstringcolor\">\"String Value 1\"<\/span> };<strong>\r\n<\/strong>  dbo.<span class=\"jspropertycolor\">collection<\/span>(<span class=\"jsstringcolor\">\"collectionName\"<\/span>).<span class=\"jspropertycolor\">deleteOne<\/span>(objRecord, <span class=\"jskeywordcolor\">function<\/span>(err, obj) {<strong>\r\n<\/strong> \u00a0\u00a0 <span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n\u00a0\u00a0\u00a0 console.<span class=\"jspropertycolor\">log<\/span>(\"Record deleted\");\r\n\u00a0\u00a0\u00a0 db.<span class=\"jspropertycolor\">close<\/span>();\r\n});\r\n}); <\/span><\/pre>\n<p>Delete a document in a collection<\/p>\n<pre><span class=\"jscolor\"><span class=\"jskeywordcolor\">var<\/span> objMongoClient = require(<span class=\"jsstringcolor\">'mongodb'<\/span>).<span class=\"jspropertycolor\">MongoClient<\/span>;\r\n<span class=\"jskeywordcolor\">var<\/span> strMongoDBURI = <span class=\"jsstringcolor\">\"mongodb:\/\/mongodb.example.com:27017\/\"<\/span>;\r\n\r\nobjMongoClient.<span class=\"jspropertycolor\">connect<\/span>(strMongoDBURI, <span class=\"jskeywordcolor\">function<\/span>(err, db) {\r\n<span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n\u00a0 <span class=\"jskeywordcolor\">var<\/span> dbo = db.<span class=\"jspropertycolor\">db<\/span>(<span class=\"jsstringcolor\">\"dbNameToSelect\"<\/span>);\r\n\u00a0 <span class=\"jskeywordcolor\">var<\/span> objQuery = { key1: <span class=\"jsstringcolor\">\"String Value 1\"<\/span> };<strong>\r\n<\/strong>  var objNewValues = { $set: {key3: <span class=\"jsstringcolor\">12345<\/span>, key4: <span class=\"jsstringcolor\">\"Another string value\"<\/span> } };\r\n\u00a0 dbo.<span class=\"jspropertycolor\">collection<\/span>(<span class=\"jsstringcolor\">\"collectionName\"<\/span>).<span class=\"jspropertycolor\">updateOne<\/span>(objQuery, objNewValues , <span class=\"jskeywordcolor\">function<\/span>(err, res) {\r\n \u00a0\u00a0 <span class=\"jskeywordcolor\">if<\/span> (err) <span class=\"jskeywordcolor\">throw<\/span> err;\r\n\u00a0\u00a0\u00a0 console.<span class=\"jspropertycolor\">log<\/span>(\"Record updated\");\r\n\u00a0\u00a0\u00a0 db.<span class=\"jspropertycolor\">close<\/span>();\r\n   });\r\n}); <\/span><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>We inherited a system that uses MongoDB, and I managed to get the sandbox online without actually learning anything about Mongo. The other environments, though, have data people care about set up in a replicated cluster of database servers. That seems like the sort of thing that&#8217;s going to require knowing more than &#8220;it&#8217;s a &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1907],"tags":[429],"class_list":["post-10372","post","type-post","status-publish","format-standard","hentry","category-mongodb","tag-mongodb"],"_links":{"self":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/10372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10372"}],"version-history":[{"count":1,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/10372\/revisions"}],"predecessor-version":[{"id":10373,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/10372\/revisions\/10373"}],"wp:attachment":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}