MongoDB Examples with the Mongo Shell

In this post we will go through some basic examples on how to write, read, update and delete data with MongoDB using the Mongo Shell.

Pre-Requisites:

You will need to have a running MongoDB Server, you can follow this post to Setup MongoDB on Ubuntu

Access MongoDB using Mongo Shell:

$ mongo
>

Lets use a specific DB called sysadmins:

> use sysadmins
switched to db sysadmins

To determine which db are we using:

> db
sysadmins   

Inserting Records:

This is a simple record consisting of name and surname

> db.test.insert({name: "John", surname: "Dory"})
WriteResult({ "nInserted" : 1 })

In this example we will be adding users to our userdata collections:

> db.userdata.insert({
    name: 'Ruan',
    surname: 'Bekker',
    username: 'ruanb',
    nationality: 'South Africa',
    occupation: 'Sysadmin',
    gender: 'male',
    age: '1987/01/01',
    os: 'linux'
})

> db.userdata.insert({
    name: 'James',
    surname: 'Anderson',
    username: 'jamesa',
    nationality: 'New Zealand',
    occupation: 'Sysadmin',
    gender: 'male',
    age: '1987/04/02',
    os: 'linux'
})

> db.userdata.insert({
    name: 'Marge',
    surname: 'Adam',
    username: 'margea',
    nationality: 'South Africa',
    occupation: 'Sysadmin',
    gender: 'female',
    age: '1989/04/05',
    os: 'mac'
})
  
> db.userdata.insert({
    name: 'Kevin',
    surname: 'Dean',
    username: 'kevind',
    nationality: 'England',
    occupation: 'Developer',
    gender: 'male',
    age: '1992/04/05',
    os: 'linux'
})
  
> db.userdata.insert({
    name: 'David',
    surname: 'Koggelberg',
    username: 'davidk',
    nationality: 'Australia',
    occupation: 'Management',
    gender: 'male',
    age: '1985/04/05',
    os: 'linux'
})

> db.userdata.insert({
    name: 'Marge',
    surname: 'Adam',
    username: 'margea',
    nationality: 'South Africa',
    occupation: 'Sysadmin',
    gender: 'female',
    age: '1989/04/05',
    os: 'mac'
})

> db.userdata.insert({
    name: 'Samantha',
    surname: 'Frost',
    username: 'samt',
    nationality: 'New Zealand',
    occupation: 'Developer',
    gender: 'female',
    age: '1992/04/09',
    os: 'windows'
})

> db.userdata.insert({
    name: 'Mark', 
    surname: 'Beck', 
    username: 'markb', 
    nationality: 'South Africa', 
    occupation: 'Sysadmin',  
    gender: 'male', 
    age: '1989/04/05',  
    os: 'mac' 
})

Searching Records

Now that we have some sample data, we will do a scan to search for all records:

> db.userdata.find()
{ "_id" : ObjectId("56d0ae9cc806f4f7cfae1601"), "name" : "Ruan", "surname" : "Bekker", "username" : "ruanb", "nationality" : "South Africa", "occupation" : "Sysadmin", "gender" : "male", "age" : "1987/01/01", "os" : "linux" }
{ "_id" : ObjectId("56d0aecac806f4f7cfae1602"), "name" : "James", "surname" : "Anderson", "username" : "jamesa", "nationality" : "New Zealand", "occupation" : "Sysadmin", "gender" : "male", "age" : "1987/04/02", "os" : "linux" }
{ "_id" : ObjectId("56d0aecbc806f4f7cfae1603"), "name" : "Marge", "surname" : "Adam", "username" : "margea", "nationality" : "South Africa", "occupation" : "Sysadmin", "gender" : "female", "age" : "1989/04/05", "os" : "mac" }
{ "_id" : ObjectId("56d0aecbc806f4f7cfae1604"), "name" : "Kevin", "surname" : "Dean", "username" : "kevind", "nationality" : "England", "occupation" : "Developer", "gender" : "male", "age" : "1992/04/05", "os" : "linux" }
{ "_id" : ObjectId("56d0aecbc806f4f7cfae1605"), "name" : "David", "surname" : "Koggelberg", "username" : "davidk", "nationality" : "Australia", "occupation" : "Management", "gender" : "male", "age" : "1985/04/05", "os" : "linux" }
{ "_id" : ObjectId("56d0aecbc806f4f7cfae1606"), "name" : "Marge", "surname" : "Adam", "username" : "margea", "nationality" : "South Africa", "occupation" : "Sysadmin", "gender" : "female", "age" : "1989/04/05", "os" : "mac" }
{ "_id" : ObjectId("56d0aeccc806f4f7cfae1607"), "name" : "Samantha", "surname" : "Frost", "username" : "samt", "nationality" : "New Zealand", "occupation" : "Developer", "gender" : "female", "age" : "1992/04/09", "os" : "windows" }
{ "_id" : ObjectId("56d0b6f1c806f4f7cfae1608"), "name" : "Mark", "surname" : "Beck", "username" : "markb", "nationality" : "South Africa", "occupation" : "Sysadmin", "gender" : "male", "age" : "1989/04/05", "os" : "mac" }

Using Pretty Print:

> db.userdata.find().pretty()
...
{
        "_id" : ObjectId("56d0aeccc806f4f7cfae1607"),
        "name" : "Samantha",
        "surname" : "Frost",
        "username" : "samt",
        "nationality" : "New Zealand",
        "occupation" : "Developer",
        "gender" : "female",
        "age" : "1992/04/09",
        "os" : "windows"
}
...

Selectors:

Selectors are to Mongo what where clauses are to SQL

  • specify criteria that MUST match. i.e., an AND clause
  • specify criteria that CAN optionally match. i.e., an OR clause
  • specify criteria that MUST exist, etc.

We will use a basic selector that matches name = Ruan:

> db.userdata.find({name: "Ruan"}).pretty()
{
        "_id" : ObjectId("56d0ae9cc806f4f7cfae1601"),
        "name" : "Ruan",
        "surname" : "Bekker",
        "username" : "ruanb",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "male",
        "age" : "1987/01/01",
        "os" : "linux"
}

Find all users which uses Mac as OS:

> db.userdata.find({os: 'mac'}).pretty()
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1603"),
        "name" : "Marge",
        "surname" : "Adam",
        "username" : "margea",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "female",
        "age" : "1989/04/05",
        "os" : "mac"
}
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1606"),
        "name" : "Marge",
        "surname" : "Adam",
        "username" : "margea",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "female",
        "age" : "1989/04/05",
        "os" : "mac"
}

Multiple Criteria:

All users that use linux that's from Australia:

> db.userdata.find({os: 'linux', $or: [{nationality: 'Australia'}]}).pretty()
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1605"),
        "name" : "David",
        "surname" : "Koggelberg",
        "username" : "davidk",
        "nationality" : "Australia",
        "occupation" : "Management",
        "gender" : "male",
        "age" : "1985/04/05",
        "os" : "linux"
}

And all users that uses linux thats from Australia and England:

> db.userdata.find({os: 'linux', $or: [{nationality: 'Australia'},{nationality: 'England'}]}).pretty()
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1604"),
        "name" : "Kevin",
        "surname" : "Dean",
        "username" : "kevind",
        "nationality" : "England",
        "occupation" : "Developer",
        "gender" : "male",
        "age" : "1992/04/05",
        "os" : "linux"
}
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1605"),
        "name" : "David",
        "surname" : "Koggelberg",
        "username" : "davidk",
        "nationality" : "Australia",
        "occupation" : "Management",
        "gender" : "male",
        "age" : "1985/04/05",
        "os" : "linux"
}

Sorting:

Here we will list all male users thats from South Africa and England, but the names are sorted by descending order

> db.userdata.find({gender: 'male', $or: [{nationality: 'South Africa'},{nationality: 'England'}]}).sort({name: -1}).pretty()
{
        "_id" : ObjectId("56d0ae9cc806f4f7cfae1601"),
        "name" : "Ruan",
        "surname" : "Bekker",
        "username" : "ruanb",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "male",
        "age" : "1987/01/01",
        "os" : "linux"
}
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1604"),
        "name" : "Kevin",
        "surname" : "Dean",
        "username" : "kevind",
        "nationality" : "England",
        "occupation" : "Developer",
        "gender" : "male",
        "age" : "1992/04/05",
        "so" : "linux"
}

On Ascending order:

> db.userdata.find({gender: 'male', $or: [{nationality: 'South Africa'},{nationality: 'England'}]}).sort({name: 1}).pretty()
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1604"),
        "name" : "Kevin",
        "surname" : "Dean",
        "username" : "kevind",
        "nationality" : "England",
        "occupation" : "Developer",
        "gender" : "male",
        "age" : "1992/04/05",
        "os" : "linux"
}
{
        "_id" : ObjectId("56d0ae9cc806f4f7cfae1601"),
        "name" : "Ruan",
        "surname" : "Bekker",
        "username" : "ruanb",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "male",
        "age" : "1987/01/01",
        "os" : "linux"
}

Sorting by nationality in Descending order and name in Ascending order:

> db.userdata.find({gender: 'male', $or: [{nationality: 'South Africa'},{nationality: 'England'}]}).sort({nationality: -1, name: 1}).pretty()
{
        "_id" : ObjectId("56d0b6f1c806f4f7cfae1608"),
        "name" : "Mark",
        "surname" : "Beck",
        "username" : "markb",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "male",
        "age" : "1989/04/05",
        "os" : "mac"
}
{
        "_id" : ObjectId("56d0ae9cc806f4f7cfae1601"),
        "name" : "Ruan",
        "surname" : "Bekker",
        "username" : "ruanb",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "male",
        "age" : "1987/01/01",
        "os" : "linux"
}
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1604"),
        "name" : "Kevin",
        "surname" : "Dean",
        "username" : "kevind",
        "nationality" : "England",
        "occupation" : "Developer",
        "gender" : "male",
        "age" : "1992/04/05",
        "os" : "linux"
}

Limit Records:

Show only the first 2 records:

> db.userdata.find({nationality: 'South Africa'}).limit(2).pretty()
{
        "_id" : ObjectId("56d0ae9cc806f4f7cfae1601"),
        "name" : "Ruan",
        "surname" : "Bekker",
        "username" : "ruanb",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "male",
        "age" : "1987/01/01",
        "os" : "linux"
}
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1603"),
        "name" : "Marge",
        "surname" : "Adam",
        "username" : "margea",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "female",
        "age" : "1989/04/05",
        "os" : "mac"
}

To see the 3rd and 4th record, meaning skipping the first 2 records:

> db.userdata.find({nationality: 'South Africa'}).limit(2).skip(2).pretty()
{
        "_id" : ObjectId("56d0aecbc806f4f7cfae1606"),
        "name" : "Marge",
        "surname" : "Adam",
        "username" : "margea",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "female",
        "age" : "1989/04/05",
        "os" : "mac"
}
{
        "_id" : ObjectId("56d0b6f1c806f4f7cfae1608"),
        "name" : "Mark",
        "surname" : "Beck",
        "username" : "markb",
        "nationality" : "South Africa",
        "occupation" : "Sysadmin",
        "gender" : "male",
        "age" : "1989/04/05",
        "os" : "mac"
}

Updating Records:

Mark Beck relocated to Seattle, lets update the record:

> db.userdata.update({username: 'markb'}, {$set: {nationality: 'Seattle'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Deleting Records:

> db.userdata.remove({username: 'markb'})
WriteResult({ "nRemoved" : 1 })

> db.userdata.remove({name: 'Ruan'},{surname: 'Bekker'})
WriteResult({ "nRemoved" : 1 })