Skip to content
Related Articles
Open in App
Not now

Related Articles

Mongoose Document Model.populate() API

Improve Article
Save Article
  • Last Updated : 25 Jan, 2023
Improve Article
Save Article

The Mongoose Document API Model.populate() method of the Mongoose API is used on the Document model. It allows to replace a field in a collection with a document from another collection. We can provide a collection name as a value to a field as a reference to populate the collection and its field. Let us understand the populate() method using an example.

Syntax:

Model.populate( doc, options, callback );

Parameters: This method accepts three parameters as discussed below:

  • doc: It is used to specify the document name. It could be a single document or an array of documents.
  • options: It is used to configure the various properties.
  • callback: It is used to specify the callback function which will be executed once the operation is done.

Return Value: This method returns the promise, which can be handled using the callback function.

Setting up Node.js application:

Step 1: Create a Node.js application using the following command:

npm init

Step 2: After creating the NodeJS application, Install the required module using the following command:

npm install mongoose

Project Structure: The project structure will look like this: 

 

Database Structure: The database structure will look like this, the following documents are present in the collection.

  • Customer collection has the following documents:

 

  • Product collection has the following documents:

 

Example 1: In this example, we have established a database connection using mongoose and defined two models over customerSchema, and productSchema. At the end, we are accessing populate() method over Product model and providing customer model as a reference to point and populate the referenced documents from both the collections.

Filename: app.js

Javascript




// Require mongoose module
const mongoose = require("mongoose");
  
// Set Up the Database connection
  
const connectionObject = mongoose.createConnection(URI, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
});
  
const customerSchema = new mongoose.Schema({
    name: String,
    address: String,
    orderNumber: Number,
})
  
const Customer =
    connectionObject.model("Customer", customerSchema);
  
const productSchema = new mongoose.Schema({
    name: String,
    price: Number,
    customer: {
        type: mongoose.ObjectId,
        ref: 'Customer'
    },
})
  
const Product =
    connectionObject.model("Product", productSchema);
  
Product.find().populate("customer").then(res => {
    console.log(res);
})


Step to run the program: To run the application execute the below command from the root directory of the project:

node app.js

Output:

[
  {
    _id: new ObjectId("63c93f348d749df47132da0d"),  
    name: 'Samsung TV 32',
    price: 18000,
    customer: {
      _id: new ObjectId("63c13b76876922405349f708"),
      name: 'Mivaan',
      address: 'IND',
      orderNumber: 9,
      __v: 0
    },
    __v: 0
  },
  {
    _id: new ObjectId("63c93f348d749df47132da0b"),  
    name: 'DJI Mavic Mini 2',
    price: 25000,
    customer: {
      _id: new ObjectId("639ede899fdf57759087a655"),
      name: 'Chintu',
      address: 'IND',
      orderNumber: 9,
      __v: 0
    },
    __v: 0
  },
  {
    _id: new ObjectId("63c93f348d749df47132da0c"),
    name: 'iPhone 11',
    price: 55000,
    customer: {
      _id: new ObjectId("639ede899fdf57759087a653"),
      name: 'Aditya',
      address: 'Mumbai',
      orderNumber: 20,
      __v: 0
    },
    __v: 0
  }
]

Example 2: In this example, we are accessing the populate() method on Customer model. For the reference we are providing the path name to be considered as a reference to another collection.

Filename: app.js

Javascript




// Require mongoose module
const mongoose = require("mongoose");
  
// Set Up the Database connection
  
const connectionObject = mongoose.createConnection(URI, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
});
  
const customerSchema = new mongoose.Schema({
    name: String,
    address: String,
    orderNumber: Number,
})
  
const Customer =
    connectionObject.model("Customer", customerSchema);
  
const productSchema = new mongoose.Schema({
    name: String,
    price: Number,
    customer: {
        type: mongoose.ObjectId,
        ref: 'Customer'
    },
})
  
const Product =
    connectionObject.model("Product", productSchema);
  
let products;
  
Product.find({ name: "Samsung TV 32" }).then(res => {
    products = res;
    Customer.populate(products, { path: "customer" }).then(res => {
        console.log(res);
    })
});


Step to run the program: To run the application execute the below command from the root directory of the project:

node app.js

Output:

[
  {
    _id: new ObjectId("63c93f348d749df47132da0d"),  
    name: 'Samsung TV 32',
    price: 18000,
    customer: {
      _id: new ObjectId("63c13b76876922405349f708"),
      name: 'Mivaan',
      address: 'IND',
      orderNumber: 9,
      __v: 0
    },
    __v: 0
  }
]

Reference: https://mongoosejs.com/docs/api/model.html#model_Model-populate


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!