Search code examples
node.jsmongodbmongoosebackend

Cross database connection and relationships in mongoDB and nodejs


how can I refer on database's table to another database's table in mongoDB like I have 2 database

  1. Root database contain user table
  2. company database contain companies table

now I want to refer companies table to user table. is there any possible way to connect this in nodejs and mongodb


Solution

  • You can do like this to populate across databases in mongoose:

    import mongoose, { Schema, Types } from "mongoose"
    
    const db1 = mongoose.createConnection('mongodb://127.0.0.1:27017/company');
    const db2 = mongoose.createConnection('mongodb://127.0.0.1:27017/root');
    
    const companySchema = new Schema({ name: String });
    const Company = db1.model('Company', companySchema);
    
    const userSchema = new Schema({
        name: String,
        company: {
            type: Types.ObjectId,
            ref: Company
        }
    })
    
    const User = db2.model('User', userSchema);
    
    const users = await User.find().populate("company")
    console.log(users)
    db1.close()
    db2.close()
    

    result:

    [
      {
        _id: new ObjectId("642d5cf980d1e56765814094"),
        name: 'myUser',
        company: {
          _id: new ObjectId("642d5cb580d1e56765814093"),
          name: 'myCompany'
        }
      }
    ]
    

    From mongosh:

    company> db.companies.find()
    [ { _id: ObjectId("642d5cb580d1e56765814093"), name: 'myCompany' } ]
    company> use root
    switched to db root
    root> db.users.find()
    [
      {
        _id: ObjectId("642d5cf980d1e56765814094"),
        name: 'myUser',
        company: ObjectId("642d5cb580d1e56765814093")
      }
    ]