Note of MongoDB

Concept

Structure:

Database -> Collection -> Documents

Compare to Mysql:

  • Collection VS. Table
  • Document VS. Row
  • Field VS. Column

Collection is not strict about what goes in it

Operations

Databases

// create database if it's not exists create it then switch current database
use mydb

// show current database
db

// list dbs , if there's not document inside , database won't show up
show dbs

// insert document
db.mycollection.insert({"name": "Black"})
show dbs

// drop database
db.dropDatabase()
show dbs

Collections

use mydb

// create collection if it's not exists create it 
// db.createCollection("myCollection")
db.createCollection("myCollection1")

// show collections
show collections

// insert to collection
// db.myCollection.insert({"name": "Black"})

// remove collection
db.myCollection1.drop()
show collections

Documents

Insert

insert document with bring an extra Field named _id, it’s unique

use school

// insert single document
db.students.insert(
    {
        "StudentNo": "1",
        "FirstName": "Mark",
        "LastName": "Waugh",
        "Age": "10"
    }
)

// insert multiple document
db.students.insert([
    {
        "StudentNo": "2",
        "FirstName": "qwe",
        "LastName": "123",
        "Age": "12"
    },
    {
        "StudentNo": "3",
        "FirstName": "wrfewfg",
        "LastName": "fewgfre",
        "Age": "14"
    },
])

Query

use school

// query collections
// db.students.find()

// query collections in json format
// db.students.find().pretty()

// query the first document
// db.students.findOne()

// query with condition
db.students.find(
    {
        // "StudentNo": "2"

        // "Age": {
        //     $gt: "10",
        //     $lte: "14",
        // }

        // AND
        // LastName: "123",
        // Age: "12"

        // OR 
        // $or: [
        //     {
        //         "LastName": "123"
        //     },
        //     {
        //         "Age": "14"
        //     }
        // ]

        // AND with OR
        // "StudentNo": "3",
        // $or: [
        //     {
        //         "Age": "13"
        //     },
        //     {
        //         "Age": "14"
        //     }
        // ]
    }
)

Update

use school

// db.students.find(
//     {
//         "_id": ObjectId("5c89cb76b032936d265eedb2")
//     }
// )

// // Update field
// db.students.update(
//     {
//         "_id": ObjectId("5c89cb76b032936d265eedb2"), // condition
//     },
//     {
//         $set: { // fields that you want to update
//             "FirstName": "Adam",
//             "LastName": "Levine"
//         }
//     }
// )

// db.students.find(
//     {
//         "_id": ObjectId("5c89cb76b032936d265eedb2")
//     }
// )

// multiple update
// db.students.update(
//     {
//         "Age": {
//             $ne: "10"
//         }
//     },
//     {
//         $set: {
//             "Age": "16"
//         }
//     },
//     {
//         "multi": true
//     }
// )

// save operation
// db.students.save({"_id":ObjectId("5c


db.students.find()

Delete

use school

db.students.find()

// remove all documents
// db.students.remove()

// remove with conditions
// db.students.remove(
//     {
//         "_id": ObjectId("5c89ea3bb032936d265eedb5")
//     }
// )

// remove only 1 document
// db.students.remove(
//     {
//         "Age": {
//             $eq: "16"
//         }
//     },
//     1
// )

Projection

What is Projection

projection in mongodb means selecting necessary data rather than selecting whole of the data of a document

db.students.find(
    {}, 
    {

        // "FirstName": 1, // only show FirstName
        // "_id": 0, // do not show "_id" field

        // "LastName": 0 // only hide "LastName", the others just show like normal
    }
)

Sort, Skip, Limit

use school

// db.students.find()

// limit
// db.students.find(
//     {},
//     {
//         "StudentNo": 1,
//         "FirstName": 1,
//         "_id": 0,

//     }
// ).limit(2)

// skip the first document && limit
// db.students.find(
//     {},
//     {
//         "StudentNo": 1,
//         "FirstName": 1,
//         "_id": 0,
//     }
// ).skip(
//     1
// ).limit(
//     1
// )

// sort
// db.students.find(
//     {},
//     {
//         "StudentNo": 1,
//         "FirstName": 1,
//         "_id": 0,
//     }
// ).sort(
//     {
//         "StudentNo": -1 // in reverse, 1 in order
//     }
// )

Indexing

use "school"

// insert huge data
// for (var i=0; i < 150000; ++i) {
//     db.posts.insert(
//         {
//             "student_id": i,
//             "name": "Mark"
//         }
//     )
// }

// without indexing(nvme disk) - 0.076s
// db.posts.find(
//     {
//         "student_id": 10000
//     }
// )

// with findone(nvme disk) - 0.022s
// db.posts.findOne(
//     {
//         "student_id": 10000
//     }
// )

// create index
// db.posts.createIndex(
//     {
//         "student_id": 1, // ignore Capitalization, strength of indexing
//         // "student_id": 2
//     },
//     {
//         "background": false, // build the index in the background
//         "unique": true
//     }
// )

// get indexes
// db.posts.getIndexes()

// with indexing(nvme disk) - 0.020s
// db.posts.find(
//     {
//         "student_id": 10000
//     }
// )

// with indexing(nvme disk) - 0.018s
// db.posts.findOne(
//     {
//         "student_id": 10000
//     }
// )

// remove index
// db.posts.dropIndex(
//     {
//         "student_id": 1
//     }
// )

// db.posts.getIndexes()

Aggregation

What is Aggregation

aggreation operation group multiple documents fields together, return computed results

Mongo Aggregation

use school

// db.students.find()

// db.students.update(
//     {},
//     {
//         $set: {
//             "Gender": "Female",
//             "Age": 17
//         }
//     },
//     {
//         "multi": true
//     }
// )

// db.students.update(
//     {
//         "_id": ObjectId("5c89ea3bb032936d265eedb5")
//     },
//     {
//         $set: {
//             "Gender": "Male",
//             "Age": 13
//         }
//     },
//     {
//         "multi": false
//     }
// )

// group by gender get count
// db.students.aggregate(
//     [
//         {
//             $group: {
//                 "_id": "$Gender",
//                 "Numbers": {
//                     $sum: 1
//                 }
//             }
//         }
//     ]
// )

// get max age
// db.students.aggregate(
//     [
//         {
//             $group: {
//                 "_id": "$Gender",
//                 "MaxAge": {
//                     $max: "$Age"
//                 },
//                 "MinAge": {
//                     $min: "$Age"
//                 }
//             }
//         }
//     ]
// )

Backup && Restore

# dump
> mongodump --db school
# restore
> mongorestore --db school dump/school
# dump collection
> mongodump --db school --collection students
> mongorestore --db school --collection students dump/school/students.bson

4 thoughts on “Note of MongoDB”

Leave a Reply

Your email address will not be published. Required fields are marked *