Difference between revisions of "MongoDB Answers"

From mi-linux
Jump to navigationJump to search
Line 41: Line 41:
 
=== Exercise 2.2 ===
 
=== Exercise 2.2 ===
  
 +
* Try and add the employees for Department 30. Remember this time, some employees will have a commission (COMM)
 +
 +
<pre>
 +
db.emp.insert( [
 +
{
 +
empno: 7499,
 +
ename: "ALLEN",
 +
job: "SALESMAN",
 +
mgr: 7698,
 +
hiredate: "20-FEB-1995",
 +
sal: 1600,
 +
comm: 300,
 +
deptno: 30
 +
},
 +
{
 +
empno: 7698,
 +
ename: "BLAKE",
 +
job: "MANAGER",
 +
mgr: 7839,
 +
hiredate: "01-MAY-1981",
 +
sal: 2850,
 +
deptno: 30
 +
},
 +
{
 +
empno: 7654,
 +
ename: "MARTIN",
 +
job: "SALESMAN",
 +
mgr: 7698,
 +
hiredate: "28-SEP-1993",
 +
sal: 1250,
 +
comm: 1400,
 +
deptno: 30
 +
},
 +
{
 +
empno: 7844,
 +
ename: "TURNER",
 +
job: "SALESMAN",
 +
mgr: 7698,
 +
hiredate: "08-SEP-1981",
 +
sal: 1500,
 +
comm: 0,
 +
deptno: 30
 +
},
 +
{
 +
empno: 7521,
 +
ename: "WARD",
 +
job: "SALESMAN",
 +
mgr: 7698,
 +
hiredate: "22-FEB-1994",
 +
sal: 1250,
 +
comm: 500,
 +
deptno: 30
 +
}
 +
])
 +
<pre>
  
 
== Answers to Section 3 ==
 
== Answers to Section 3 ==

Revision as of 11:19, 13 November 2017

Main Page >> MongoDB >>MongoDB Workbook >> Exercise Answers


You should only look at the answers once you have attempted them yourself!


Answers to Section 2

Exercise 2.1

  • Compare how you added the above data and how it differs from INSERT records in a relational database

A SQL INSERT statement for department 30 would be:

INSERT INTO dept(deptno, dname, loc) VALUES (30,'SALES','CHICAGO');

Apart from the syntax differences, you could get away with not defining the field names again, for example, this would work too:

INSERT INTO dept VALUES (30,'SALES','CHICAGO');

This is because the table has already been defined, so there is a well defined schema in existence. MongoDB is schema-less, so you need to define some sort of structure as the documents are added.

  • Try and add Department 30
db.dept.insert(
 {
    _id: 30,
    deptno: 30,
    dname:  "SALES",
    loc:    "CHICAGO"
})

Exercise 2.2

  • Try and add the employees for Department 30. Remember this time, some employees will have a commission (COMM)
db.emp.insert( [
{
	empno: 	7499,
 	ename: 	"ALLEN",
 	job: 	"SALESMAN",
 	mgr:	7698,
 	hiredate: "20-FEB-1995",
 	sal:	1600,
	comm:	300,
 	deptno:	30
},
{
	empno: 	7698,
 	ename: 	"BLAKE",
 	job: 	"MANAGER",
 	mgr:	7839,
 	hiredate: "01-MAY-1981",
 	sal:	2850,
 	deptno:	30
},
{
	empno: 	7654,
 	ename: 	"MARTIN",
 	job: 	"SALESMAN",
 	mgr:	7698,
 	hiredate: "28-SEP-1993",
 	sal:	1250,
	comm:	1400,
 	deptno:	30
},
{
	empno: 	7844,
 	ename: 	"TURNER",
 	job: 	"SALESMAN",
	mgr:	7698,
 	hiredate: "08-SEP-1981",
 	sal:	1500,
	comm:	0,
 	deptno:	30
},
{
	empno: 	7521,
 	ename: 	"WARD",
 	job: 	"SALESMAN",
 	mgr:	7698,
 	hiredate: "22-FEB-1994",
 	sal:	1250,
	comm:	500,
 	deptno:	30
}
])
<pre>

== Answers to Section 3 ==

=== Exercise 3.1 ===

* Compare how you added the above data and how it differs from INSERT records in a relational database

Think about how this differs from using INSERT statements in Oracle to add the data. An SQL INSERT generally only insert one record at a time to one table.

* Try and add Department 30. Note it has some values for the comm field.

<pre style="color:blue">
db.deptCollection.insert( 
 {
    deptno: 30, 
    dname: 'SALES',
    loc: 'CHICAGO',
    employees: [
    {
        empno: 7499,
        ename: 'ALLEN',	
        job: 'SALESMAN',
        mgr: 7698, 	
        hiredate: new Date('1995-02-20'),
        sal: 1600,
        comm: 300
    },
    {
        empno: 7698,
        ename: 'BLAKE',	
        job: 'MANAGER',
        mgr: 7839, 	
        hiredate: new Date('1981-05-01'),
        sal: 2850
    }, 	 	 	 	
    {   empno: 7900,
        ename: 'JAMES',	
        job: 'CLERK',
        mgr: 7698, 	
        hiredate: new Date('1981-12-03'),
        sal: 1600
    },
    {
        empno: 7654,
        ename: 'MARTIN',	
        job: 'SALESMAN',
        mgr: 7698, 	
        hiredate: new Date('1993-09-28'),
        sal: 1250,
        comm: 1400
    },
    {   empno: 7844,
        ename: 'TURNER',	
        job: 'SALESMAN',
        mgr: 7698, 	
        hiredate: new Date('1981-09-08'),
        sal: 1500,
        comm: 0
    },
    {
        empno: 7521,
        ename: 'WARD',	
        job: 'SALESMAN',
        mgr: 7698, 	
        hiredate: new Date('1994-02-22'),
        sal: 1250,
        comm: 500
    } ]
 })

Exercise 3.2

2.2.1 Update the name of department 40 to: COMPUTING

 db.deptCollection.update({deptno:40}, 
  {$set:  {dname: 'COMPUTING'}})

2.2.1 Update the salary of employee number 7788 in department 20 to 3500

db.deptCollection.update (
{ deptno: 20 , "employees.empno": 7788}, 
  { $set: {"employees.$.sal" : 3500} }  
)

Always check that your update has worked. As a clue, the system should output a WriteResult, telling you how many records were updated:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Next Step

Return to the Workbook.