Difference between revisions of "MongoDB Update"

From mi-linux
Jump to navigationJump to search
Line 43: Line 43:
  
 
=== Updating the emp collection ===
 
=== Updating the emp collection ===
 +
 +
Carter has now become an analyst:
 +
 +
db.emp.update({'empno':7782},
 +
{$set:  {job: 'ANALYST'}})
 +
 +
 +
This is equivalent to the SQL statement:
 +
 +
UPDATE emp SET job = 'ANALYST'
 +
WHERE empno = 7782;
 +
<pre>
 +
 +
 +
There are some limitations currently if you want to use a value in a field to update the value in another field, or even in the same field, such as increase existing salaries by 10%.
 +
 +
There are some field update operators that can be used, such as ''$inc'', which increments a field by a specified value. The ''$inc'' operator accepts positive and negative values.
 +
 +
For example, observe what the following does:
 +
 +
db.emp.update({},
 +
{$inc:  {sal: 100}})
 +
 +
 +
This should update all the salary in all the documents by £100.
 +
 +
Check the collection - is this the case?
 +
 +
db.emp.find().pretty()
 +
 +
You should find only the first record has been updated.
  
 
== Exercise 2.2 ==
 
== Exercise 2.2 ==

Revision as of 16:51, 12 November 2017

Main Page >> MongoDB >>MongoDB Workbook >> Updating Collections

Updating a Collection

The format of the update command is:

 db.collectionName.update({'keyField': 'value' }, 
  {$set: field: 'newValue' }
 )

The update() function can be used to update one or more documents. If the change should only apply to one document, the keyField needs to be a field with unique values, to ensure the correct document is updated.

This is similar in SQL to providng the WHERE clause of an UPDATE command.

Alternatively since version 3.2, MongoDB also supports the following functions:

db.collectionName.updateOne(); /* updates a single document that matches a specified filter 
                                  (even if several documents match the filter) */
db.collectionName.updateMany(); /* updates all documents that matches a specified filter */
db.collectionName.replaceOne(); /* replaces the first document that matches a specified filter             
                                    (even if several documents match the filter) */


Updating the dept collection

Update department 40 to change the location to Wolverhampton:

db.dept.update({'deptno':40}, 
 {$set:  {'loc': 'WOLVERHAMPTON'}})

Check the changes have been made:

db.dept.find({"deptno":40}).pretty()

Updating the emp collection

Carter has now become an analyst:

db.emp.update({'empno':7782}, 
{$set:  {job: 'ANALYST'}})


This is equivalent to the SQL statement:

UPDATE emp SET job = 'ANALYST' WHERE empno = 7782;



There are some limitations currently if you want to use a value in a field to update the value in another field, or even in the same field, such as increase existing salaries by 10%.

There are some field update operators that can be used, such as $inc, which increments a field by a specified value. The $inc operator accepts positive and negative values.

For example, observe what the following does:

 db.emp.update({}, 
 {$inc:  {sal: 100}})


This should update all the salary in all the documents by £100. 

Check the collection - is this the case?

 db.emp.find().pretty()

You should find only the first record has been updated.

Exercise 2.2

* 2.2.1 Update the name of department 40 to: COMPUTING * 2.2.1 Update the salary of employee number 7788 in department 20 to 3500

Next Step

Deleting a document, or collection.