MongoDB connect model with a specific database

Viewed 22

When I use mongoose.connection, models are connected directly with the unique connection.

In this case db1 is only used for querying (not model require). But db2 use 2 models.

How can I connect those models with db2 only?

Thanks for helping

const db1 = mongoose.createConnection("atlasuri").asPromise()
const db2 = mongoose.createConnection("localuri").asPromise()

app.get("/",async(req,res)=>{
    const finded =  (await db1).collection("users")
    await finded.forEach(el=> console.log(el))
    res.json(finded)
})

Models

const Criterion1=new mongoose.model('Criterion',new mongoose.Schema({
 name:string
}));
const User=new mongoose.model('Criterion',new mongoose.Schema({
 name:string
}));
1 Answers

Use createConnection():

const CriterionModel = require('./criterion');
const mongoose = require('mongoose');

const atlasuri = 'mongodb://localhost:27017/so1';  // <== your Atlas URI HERE
const localuri = 'mongodb://localhost:27017/so2';

const conn = mongoose.createConnection(atlasuri);
const conn2 = mongoose.createConnection(localuri);

const Criterion1 = conn.model('Criterion', new mongoose.Schema({
  name:String
}));

const users = conn2.model('Criterion', new mongoose.Schema({
  name:String
}));

// atlasuri
conn.on('connected', async () => {
  const doc = await Criterion1({  // add a document
    'name': 'Only in atlasuri'
  });
    
  await doc.save((err, doc) => {
    if (err) {
      console.log('error adding!');
    }
  });

  console.log('Added to atlas');
});

// localuri
conn2.on('connected', async () => {
  // add a document
  const doc = await users({  // add a document
    'name': 'Only in localuri'
  });
   
  doc.save((err, doc) => {
    if (err) {
      console.log('error adding!');
    }
  });
  console.log('Added to local');
});

function handleExit(signal) {
  console.log(`Received ${signal}. Shutting down.`);
  conn.close();
  conn2.close();
  process.exit(0);
}
process.on('SIGINT', handleExit);
process.on('SIGQUIT', handleExit);
process.on('SIGTERM', handleExit);

In criterion.js:

const mongoose = require('mongoose');

const CriterionSchema = mongoose.Schema({
  name:String
});

module.exports = mongoose.model('Criterion', CriterionSchema);
Related