Mongoose change _id to id Nodejs Express API

Tutorial “Mongoose change _id to id in Returned Response – Node.js/Express application example”

In the post, I show how to change _id to id in returned response when using Mongoose ODM with Node.js/Express RestAPIs application example.

* Technologies:
– Node.js/Express
– Mongoose ODM
– MongoDB

Project Goal – Mongoose change _id to id

Mongoose ODM uses _id attribute to identiy an Object’s id:

Nodejs Restapi Mongoose Convert _id to id to response client initial data
Nodejs Restapi Mongoose Convert _id to id to response client initial data

How to change _id to id in RestAPI’s returned response?

-> In Mongoose model, we can implement a method transform to resolve it:


const mongoose = require('mongoose');
var Schema = mongoose.Schema;
 
var bookSchema = new Schema({
    title: String,
    author: String,
	description: String,
	published: String	
});

bookSchema.method('transform', function() {
    var obj = this.toObject();

    //Rename fields
    obj.id = obj._id;
    delete obj._id;

    return obj;
});

module.exports = mongoose.model('Book', bookSchema); 

-> Result:

Express Request get All Customers
Express Request get All Customers

Let’s practice!

Set up Nodejs/Express project

Init package.json by cmd: npm init

Install express, mongoose: $npm install express mongoose --save

-> now package.json file:


{
  "name": "nodejs-restapis-mongoose",
  "version": "1.0.0",
  "description": "Nodejs-RestAPI-Mongoose",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "Nodejs",
    "RestAPI",
    "Mongoose"
  ],
  "author": "ozenero.com",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.4",
    "mongoose": "^5.4.2"
  }
}

Setting up Mongoose connection

Open file ./app/config/mongodb.config.js, add the mongodb database configuration:


module.exports = {
    url: 'mongodb://localhost:27017/nodejs-demo'
}

Create Nodejs Express Mongoose model

./app/model/book.model.js file:


const mongoose = require('mongoose');
var Schema = mongoose.Schema;
 
var bookSchema = new Schema({
    title: String,
    author: String,
	description: String,
	published: String	
});

bookSchema.method('transform', function() {
    var obj = this.toObject();

    //Rename fields
    obj.id = obj._id;
    delete obj._id;

    return obj;
});

module.exports = mongoose.model('Book', bookSchema); 

Define Nodejs Express RestAPIs Router

Now we define Book’s routes in ./app/route/book.route.js file as below code:


module.exports = function(app) {
 
    const books = require('../controller/book.controller.js');
	
    // Retrieve all Books
    app.get('/api/books', books.findAll);
 
    // Retrieve a single Book by Id
    app.get('/api/books/:bookId', books.findOne);
}

Implement Nodejs Express RestAPI Controller

In the tutorial “Mongoose change _id to id”, we implement Book’s controller in ./app/controller/book.controller.js file as below sourcecode:


const Book = require('../model/book.model.js');

// FETCH all Books
exports.findAll = (req, res) => {
    Book.find()
    .then(books => {		
		let returnedBooks = [];
		
		for (let i = 0; i < books.length; i++) {
			returnedBooks.push(books[i].transform());
		}
		
		res.send(returnedBooks);
    }).catch(err => {
        res.status(500).send({
            message: err.message
        });
    });
};
 
// FIND a Book
exports.findOne = (req, res) => {
    Book.findById(req.params.bookId)
    .then(book => {
        if(!book) {
            return res.status(404).send({
                message: "Book not found with id " + req.params.bookId
            });            
        }

        res.send(book.transform());
    }).catch(err => {
        if(err.kind === 'ObjectId') {
            return res.status(404).send({
                message: "Book not found with id " + req.params.bookId
            });                
        }
        return res.status(500).send({
            message: "Error retrieving Book with id " + req.params.bookId
        });
    });
};

Nodejs Express Server.js

Now we define server.js file for Nodejs/Express server running at 8080 port as below sourcecode:


var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json())
 
// Configuring the database
const dbConfig = require('./app/config/mongodb.config.js');
const mongoose = require('mongoose');
 
const Book = require('./app/model/book.model.js');
 
mongoose.Promise = global.Promise;
 
// Connecting to the database
mongoose.connect(dbConfig.url)
.then(() => {
    console.log("Successfully connected to MongoDB.");    
	initial();
}).catch(err => {
    console.log('Could not connect to MongoDB.');
    process.exit();
});
 
require('./app/route/book.route.js')(app);
 
// Create a Server
var server = app.listen(8080, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("App listening at http://%s:%s", host, port)
 
})

function initial(){
	Book.create({
		title: "Origin",
		author: "Dan Brown",
		description: "Origin thrusts Robert Langdon into the dangerous ntersectio of humankind's two most enduring questions",
		published: "2017"	
	});
	
	Book.create({
		title: "Happy Potter and the Deathly Hallows",
		author: "J.K. Rowling",
		description: "The seventh and final novel of the Harry Potter series.",
		published: "2007"	
	});
	
	Book.create({
		title: "The 100-Year-Old Man Who Climbed Out the Window and Disappeared",
		author: "Jonas Jonasson",
		description: "",
		published: "2009"	
	});
}

Read More

Nodejs Express Run & Check Results

– Run MongoDB mongod.exe
– Run Nodejs application: npm start

Nodejs Restapi Mongoose Convert _id to id to response client initial data
Nodejs Restapi Mongoose Convert _id to id to response client initial data

Express get all customers:

Express Request Get All customers
Express Request Get All customers

– Express get a customer by id:

Nodejs Expresss Get a Customer by Id
Nodejs Expresss Get a Customer by Id

Sourcecode

mongoose-nodejs-example-_id-to-id

– Github Sourcecode:

nodejs-change-_id-to-id-github-sourcecode

Angular 11 Node.js Mysql Crud Example

Tutorial: “Angular 11 Node.js Mysql Crud Example – using Express and Sequelize ORM”

In the tutorial, I introduce how to build an Angular 11 Node.js MySQL CRUD Example RestAPIs Fullstack Project with the help of Express Web Framework and Sequelize ORM for POST/GET/PUT/DELETE requests with step by step coding examples.

Related posts:


Continue reading “Angular 11 Node.js Mysql Crud Example”

React Node.js MongoDB CRUD Example – MERN Stack

Tutorial: “React Node.js MongoDB CRUD Example – MERN Stack Application”

In the tutorial, I introduce how to build an “React.js Nodejs CRUD MongoDB Example” project with the help of Ajax to POST/GET/PUT/DELETE requests with step by step coding examples:

– Nodejs project produces CRUD RestAPIs with MongoDB database using the supporting of Mongoose ODM.
– React.js project will consume the Nodejs CRUD RestAPIs by Ajax then show up on Reactjs component’s views.

Related posts:


Continue reading “React Node.js MongoDB CRUD Example – MERN Stack”

Reactjs Nodejs PostgreSQL Example

In the tutorial, I introduce how to build an “React.js Nodejs CRUD PostgreSQL Example” project with the help of Ajax to POST/GET/PUT/DELETE requests with step by step coding examples:

– Nodejs project produces CRUD RestAPIs with PostgreSQL database using the supporting of Sequelize ORM.
– React.js project will consume the Nodejs CRUD RestAPIs by Ajax then show up on Reactjs component’s views.

Related posts:


Continue reading “Reactjs Nodejs PostgreSQL Example”

React Node.js MySQL CRUD Example

Tutorial: “React Node.js MySQL CRUD Example – Step By Step React, Nodejs and Mysql simple full-stack Application”

In the tutorial, I introduce how to build an “React.js Nodejs CRUD MySQL Example – CRUD Operation in React.js and MySQL” project with the help of Ajax to POST/GET/PUT/DELETE requests with step by step coding examples:

– Nodejs project produces CRUD RestAPIs with MySQL database using the supporting of Sequelize ORM.
– React.js project will consume the Nodejs CRUD RestAPIs by Ajax then show up on Reactjs component’s views.

Related posts:


Continue reading “React Node.js MySQL CRUD Example”