Skip to main content

MongoDB_01

    After some practice on ReactJS, moved back to NodeJS. Interactive design is pale if it can only play alone. Quite often, ReactJS, NodeJS are written together with SQL or nonDB (NoSQL Database) on job description. MongoDB is a famous nonDB.

    I'm using external MongoDB on https://account.mongodb.com/account/login. Topic related to npm installation, please refer to https://www.w3schools.com/nodejs/nodejs_mongodb.asp My .js codes connect to MongoDB via URI string. Confidential information is encapsulated in a class object as a required file.

    So, here we go! My exercises follow w3schools's tutorial, but designed in much simple way. To me, "simple" doesn't only mean "short". Clean slate also plays an important role. I may use embed function as few as possible.

Create Connection 


The MangoClient.connect() API is different from what is on w3school's tutorial. And when I did research, it take me a while to reach the current API documentation, v3.5
NodeJS's MongoDB API v3.5

Since I quite often get v.1.8/1.9 API, probably still some programmers doesn't notice that connect() takes different parameters....
API documentation is quite profound. Usually I define callback functions according to API Docs. ie. the 2nd parameter of connection()'s callback function is connection object.

Create DB, Collection



I don't think MongoDB really cares whethere db or collection is created, if there is nothing inside.... Don't know. Din't have time to try. As I can see,  conn.db(dbName) doesn't really make any call to db host, and then it create a collection with specified db name. As we can see later on, I can also set a nested document even when the structure wasn't defined yet. But only one layer. Maybe I can try to set value cross multi-layers someday.....

Usually I don't use the collection object returned by db.createCollection()'s callback.
kimetsu..... Can refere to Kimetsu no Yaiba 😜


Close Connection 



Always remember to close connection at the end. This is a good habit.


Insert Record



There are insertOne() and insertMany()
I prefer to use insertMany() since it can also insert only one record.

I intentionally design a  complex structure. Though it is not ideal, probably redundant... Many tutorial provide key-value, hash-table like structure which is not very practical in my work. I need to use complicated structure, and must be able to manipulate it.

There are string, array and nested object in design.

Query Records


I found query is rather difficult, comparing to SQL..... Quite often, I couldn't get anything if I didn't precisely match the value. Then what is the query for? if I must know everything! Alright... it's because I'm not very familiar with nonDB. I tried to use  regular expression to retrieve multiple data, with rule such like 'there are "er" in string'....... Anyway, it is a good chance to practice regular expression. (Maybe too few records is also one of my troubles.)

Query Nested Structure




Query a nested structure, key names be refereed as dot-connected string.
As regular expression, the definition string needs no quotes.
find() function doesn't return records, it only return a cursor. toArray() function processes the cursor and passes data to callback function.

Query Array


Query on array element is similar to query a string.
project() function decide which column to or not to return. It is a cursor process function; doesn't process the result. It hands data to toArray() to deal with decipher.


Sort Query 


sort() function decide ascend or descend order. It is only a cursor process function, too.



Comments

Popular posts from this blog

Bookmark service (MongoDB & Spring REST) -2/2

    I accidentally deleted my development VM. I got lucky having the habit of taking notes. This blog is useful. Development VM is doom to be lost. Rebuild it waste time, but having a clean slate is refreshing~. What concerns me more is my AWS free quota this month is reaching 85%. The second VM I launched but never being used might be the one to blame. (Of course, my mistake.) I terminated the wrong VM. Now I got Linux 2 built. Great, just threw away everything happened on AMI.  1st layer: Page Page class   Originally, I need to prepare getter/setter for all class properties for Spring. By using lombok, I only need to create constructors. lombok will deal with getter/setter and toString(). But there are chances to call getter/setter, but how? .......Naming convention.... Capitalize the 1st character with the prefix get/set.  Annotation @Data was used on this class.  Repository class Spring Docs: Repository https://docs.spring.io/spring-data/mongodb/docs/3....

gamer's interview

This project simulates a gamer's interview. Based on NodeJS+ ReactJS The setting is interviewing a gamer/journalist what's his/her plan of March 2020? The gamer answers his/her game list in plan, how many reviews on demand and how many hours expected. Games selected for review take 5 hours for each, while others take one. This project is designed to practice render html, jsx, component, props introduced in  https://www.w3schools.com/REACT/default.asp . Also fixed other issues to make it work. When trying to modualize objects and tools, my design developed to separate views and processes. And it is quite similar to the initialized structure NodeJS+ReactJS provided. Furthermore, since include local module files are banned by browsers, use NodeJS service seems to be the best option. view file main process object tool

Comments for my Server/Client Web API samples

        Finally, I finished the comments for python/07 and 09 projects. I almost forgot to put the date on source code which is used to note how long it took me. Not precisely in hours….. I didn’t include source code in my previous post. If choosing code-section for this post…… maybe I want to mark out my comment….. (Really?!)          Once my work was developing websites for enterprises, including ERP, CRM or content sites. The sustainability of network and security are important issues. There are 2 methods for HTML Form submission: GET and POST. Submit via POST is secure, compared to GET which piles parameters on URL. RESTful API is mainly using GET.         Yup, even if you have a certification key, if you put the value on the URL, it is visible data. When writing socket-communication, client-server sockets are a pair; both follow the agreement on commands and structures; and there are countless ports for usa...