MongoDB InsertNestedData
From mi-linux
Jump to navigationJump to search
Main Page >> MongoDB >>MongoDB Workbook >> Insert Data
Inserting data
For this exercise we are going to nest the Employee details within the Department, rather than having two separate collections as seen in the previous section.
The format for the INSERT command is still the same, but this time one of our keyField values will be an array to hold the employee details:
db.collectionName.insert( { keyField_1: 'value1', keyField_n: valueN, } )
Note:
- character and date values must be enclosed in matching single (') or double quotes (").
- numeric values do not need quotes.
- keyFields are comma-separated and the value can be a nested document or array.
- each record is enclosed in curly brackets: {}
Department 10
The following example will create a insert data representing the DEPT/EMP tables seen in the Oracle Sample Data.
Add department 10 and it's employees:
db.deptCollection.insert( { deptno: 10, dname: 'ACCOUNTING', loc: 'NEW YORK', employees: [ { empno: 7782, ename: 'CLARK', job: 'MANAGER', mgr: 7839, hiredate: new Date('1989-06-09'), sal: 2450 }, { empno:7839, ename: 'KING', job: 'PRESIDENT', hiredate: new Date('1980-11-17'), sal: 5000 }, { empno: 7934, ename: 'MILLER', job: 'CLERK', mgr: 7782, hiredate: new Date('1985-01-23'), sal: 1300 } ] } )
Assuming you have no error messages, the system should respond with:
WriteResult({ "nInserted" : 1 })
Department 20
Next add department 20:
db.deptCollection.insert( { deptno: 20, dname: 'RESEARCH', loc: 'DALLAS', employees: [ { empno: 7876, ename: 'ADAMS', job: 'CLERK', mgr: 7788, hiredate: new Date(), sal: 1100 }, { empno: 7902, ename: 'FORD', job: 'ANALYST', mgr: 7566, hiredate: new Date('1991-12-03'), sal: 3000 }, { empno: 7066, ename: 'JONES', job: 'MANAGER', mgr: 7839, hiredate: new Date('1991-04-02'), sal: 2975 }, { empno: 7788, ename: 'SCOTT', job: 'ANALYST', mgr: 7566, hiredate: new Date('2015-10-16'), sal: 3000 } ] } )
Department 40
Next department 40, which has no employees currently:
db.deptCollection.insert( { deptno: 40, dname: 'OPERATIONS', loc: 'BOSTON' } )
Things to note
If you are getting errors, check carefully that:
- every opening bracket has an appropriate closing bracket:
- the insert statement uses round brackets: ()
- an array uses square brackets: []
- a collection uses curly brackets: {}
- each element in a nested collection will also use curly brackets
- each key:value pair are separated by commas, except for the last item
- strings are enclosed in single or double quotes, e.g., 'myString', or "myString"
- date strings are enclosed in single/double quotes and the format is 'yyyy-mm-dd' e.g., Date('2016-10-10')
- use the Date() constructor to create a date datatype
- date can also be a datetime, e.g., new Date("<yyyy-mm-ddThh:mm:ss>")
- new Date() will return the current date
Exercise 2.1
- Compare how you added the above data and how it differs from INSERT records in a relational database
- Try and add Department 30. Note it has some values for the comm field.
Next Step
Querying the collection