Mongoose Populate() 方法
在MongoDB中, Population 是将一个集合中的指定路径替换为另一个集合中的实际文档的过程。
Population 的需求: 当在一个集合的模式中,我们为任何字段提供对另一个集合中的文档的引用时,我们需要使用populate()方法来填充该字段。
示例: 在下面的示例中,我们有一个userSchema和另一个postSchema,在postSchema中,我们有一个字段postedBy,它引用了User模型中的一个文档。
const userSchema = new mongoose.Schema({
username: String,
email: String
})
const postSchema = new mongoose.Schema({
title: String,
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
})
const User = mongoose.model('User', userSchema);
const Post = mongoose.model('Post', postSchema);
module.exports = {
Source, Destination, User, Post
}
安装 mongoose:
步骤1: 您可以访问链接 安装 mongoose 以安装 mongoose 模块。您可以使用以下命令安装此软件包。
npm install mongoose
步骤2: 现在可以使用以下方法在您的文件中导入mongoose模块:
const mongoose = require('mongoose');
数据库: 最初我们在我们的数据库GFG中有两个集合users和posts。而且每个集合中都包含一个文档。
示例1: 我们将执行查询以找到所有的帖子 不使用 populate() 方法 。
创建一个文件夹并添加文件 main.js ,内容如下所示:
main.js
// Requiring module
const mongoose = require('mongoose');
// Connecting to database
mongoose.connect('mongodb://localhost:27017/GFG',
{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false
});
// Creating Schemas
const userSchema = new mongoose.Schema({
username: String,
email: String
})
const postSchema = new mongoose.Schema({
title: String,
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
})
// Creating models from userSchema and postSchema
const User = mongoose.model('User', userSchema);
const Post = mongoose.model('Post', postSchema);
// Query to find and show all the posts
Post.find()
.then(p => console.log(p))
.catch(error => console.log(error));
运行下面的命令来执行 main.js:
node main.js
输出: 在输出中,我们可以看到在postedBy字段中,我们只得到了ObjectId(用户文档的_id字段),而不是整个文档。
示例2: 我们将执行查询以找到所有帖子 使用populate()方法 。
为了克服上述问题,我们使用 populate() 方法来替换用户 ObjectId 字段,该字段包含了所有用户数据的完整文档。因此,我们只需要用以下代码替换 main.js 文件中的查询部分:
Post.find()
**.populate("postedBy")**
.then(p=>console.log(p))
.catch(error=>console.log(error));
注意: 在populate()方法的参数中,我们传递要用用户数据填充的字段。
输出: 使用populate方法后,我们可以看到在输出中,我们可以获得帖子的postedBy字段中的所有用户数据。