Mongoose Populate() 方法

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。而且每个集合中都包含一个文档。

Mongoose Populate() 方法

示例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字段),而不是整个文档。

Mongoose Populate() 方法

示例2: 我们将执行查询以找到所有帖子 使用populate()方法

为了克服上述问题,我们使用 populate() 方法来替换用户 ObjectId 字段,该字段包含了所有用户数据的完整文档。因此,我们只需要用以下代码替换 main.js 文件中的查询部分:

Post.find()
**.populate("postedBy")**
.then(p=>console.log(p))
.catch(error=>console.log(error));

注意: 在populate()方法的参数中,我们传递要用用户数据填充的字段。

输出: 使用populate方法后,我们可以看到在输出中,我们可以获得帖子的postedBy字段中的所有用户数据。

Mongoose Populate() 方法

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程