Mongoose Document Model.populate()函数

Mongoose Document Model.populate()函数

Mongoose 的 Document API Model.populate() 方法用于 Document 模型。它允许用另一个集合中的文档替换集合中的字段。我们可以将集合名称作为字段的值,作为引用来填充集合和它的字段。让我们通过一个示例来了解 populate() 方法。

语法:

Model.populate( doc, options, callback );

参数: 该方法接受以下三个参数:

  • doc: 用于指定文档名称。可以是单个文档或文档数组。
  • options: 用于配置各种属性。
  • callback: 用于指定操作完成后将执行的回调函数。

返回值: 该方法返回一个可通过回调函数处理的Promise。

设置Node.js应用程序:

步骤1: 使用以下命令创建一个Node.js应用程序:

npm init

步骤2: 创建NodeJS应用程序后,使用以下命令安装所需的模块:

npm install mongoose

项目结构: 项目的结构将如下所示:

Mongoose Document Model.populate()函数

数据库结构: 数据库结构将如下所示,以下的文档存在于集合中。

  • 客户 集合包含以下文档:

Mongoose Document Model.populate()函数

  • 产品 收藏包含以下文档:

Mongoose Document Model.populate()函数

示例 1: 在此示例中,我们使用mongoose建立了一个数据库连接,并定义了两个模型, customerSchema 和 productSchema 。最后,我们在 Product 模型上使用 populate() 方法,并提供 customer 模型作为引用,以便从两个集合中引用和填充相关文档。

文件名:app.js

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

运行程序的步骤: 在项目的根目录下执行以下命令来运行应用程序:

node app.js

输出:

[
    {
        _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
    }
]

示例 2: 在这个示例中,我们正在访问Customer模型上的populate()方法。作为参考,我们提供了要被视为对另一个集合的引用的路径名称。

文件名:app.js

// Require mongoose module
const mongoose = require("mongoose");
 
// Set Up the Database connection
const URI = "mongodb://localhost:27017/geeksforgeeks";
 
let connectionObject = mongoose.createConnection(URI, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
});
 
let customerSchema = new mongoose.Schema({
    name: String,
    address: String,
    orderNumber: Number,
})
 
let Customer =
    connectionObject.model("Customer", customerSchema);
 
let productSchema = new mongoose.Schema({
    name: String,
    price: Number,
    customer: {
        type: mongoose.ObjectId,
        ref: 'Customer'
    },
})
 
let 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);
    })
});

运行程序的步骤: 从项目的根目录执行以下命令来运行应用程序:

node app.js

输出:

[
    {
        _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
    }
]

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程