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
项目结构: 项目的结构将如下所示:
数据库结构: 数据库结构将如下所示,以下的文档存在于集合中。
- 客户 集合包含以下文档:
- 产品 收藏包含以下文档:
示例 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