Sahat Yalkabov
Sahat Yalkabov

Reputation: 33694

Mongoose.js creates multiple connections to MongoDB from one connect() call

I am making a single connection to MongoDB via Mongoose in Node.js Express app:

var express = require('express');
var mongoose = require('mongoose');
mongoose.connect('localhost', 'test');

I then define schema, followed by models, and lastly the controller that pulls all users from the database:

app.get('/users', function (req, res) {
  return User.find(function (err, users) {
    if (!err) {
      return res.send(users);
    }
  });
});

These DB connections open during the application start and they stay open for the duration of the node.js application.

What bothers me is why do I have 5 connections open? As soon as I close the node.js app, all 5 connections are closed. enter image description here

Related note: For a REST API server is it better to have MongoDB connection always open. Or is it better to manually open/close connections per each user request? d

Upvotes: 19

Views: 7345

Answers (2)

Sina Mirshafiei
Sina Mirshafiei

Reputation: 312

Add this if statement to check only when mongoose disconnected, try to connect it

if (Mongoose.connection.readyState === 0)
       mongoose.connect('localhost', 'test');

readyState contain these types :

0: disconnected
1: connected
2: connecting
3: disconnecting

Upvotes: 1

JohnnyHK
JohnnyHK

Reputation: 312129

That's because Mongoose uses a pool of 5 connections (by default) that are shared throughout your application. For best performance, it's best to just leave them open.

You can alter the default behavior via the options parameter to mongoose.connect. For example:

mongoose.connect('localhost', 'test', { server: { poolSize: 3 }}); // Use 3 connections

Upvotes: 47

Related Questions