# Mongo DB

"mongoose": "^5.11.8",

# Document Database

A record in MongoDB is a document, which is a data structure composed of field and value pairs. MongoDB documents are similar to JSON objects. The values of fields may include other documents, arrays, and arrays of documents.

# The advantages of using documents are:

  • Documents correspond to native data types in many programming languages.
  • Embedded documents and arrays reduce need for expensive joins.
  • Dynamic schema supports fluent polymorphism.

# High Performance

MongoDB provides high performance data persistence. In particular, Support for embedded data models reduces I/O activity on database system. Indexes support faster queries and can include keys from embedded documents and arrays.

# High Availability

MongoDB's replication facility, called replica set, provides:

  • automatic failover
  • data redundancy.

A replica set is a group of MongoDB servers that maintain the same data set, providing redundancy and increasing data availability.

# Horizontal Scalability

MongoDB provides horizontal scalability as part of its core functionality:

  • Sharding distributes data across a cluster of machines.

# Create mongo db connection

// app.js
// mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
// const db = process.env.DATABASE.replace('<PASSWORD>',process.env.DATABASE);
const mongoose = require('mongoose');
dotenv.config({ path : './config.env'});
const db = process.env.DATABASE_LOCAL;
mongoose.connect(db,{
    useNewUrlParser:true,
    useCreateIndex:true,
    useUnifiedTopology:true,
    useFindAndModify:false
}).then((con)=>{
    console.log("db connected");
});

# Create schema

Add keys and and assign that schema to model.

// tourModel.js
const mongoose = require('mongoose');
const toursSchema = new mongoose.Schema({
    name : { 
        type : String , 
        require: [true, 'name is required'], 
        unique :true
    },
    rating : Number,
    price : Number
})
const Tour = mongoose.model('Tour',toursSchema);
module.exports = Tour;

# Use model in controller

Add model to controller and use method to to CRUD operations.

// toursController.js
const Tour = require('../model/tourModel');
exports.getAllTour = async(req,res)=>{
    const allTour = await Tour.find();
    res.status(200).json({
        status:'success',
        length:allTour.length,
        data: allTour
    })
};
exports.addTour = async (req, res) =>{
    const testTour = new Tour(req.body);
    testTour.save().then(doc=> {
        res.status(200).json({
            status:'success',
            data: doc
        })
    }).catch(e=> console.log(e));
}