如何使用Node.js从MongoDB的两个不同集合中获取数据

如何使用Node.js从MongoDB的两个不同集合中获取数据

Mongoose 是用于MongoDB的对象数据建模(ODM)库。它定义了一个强类型模式,包含默认值和模式验证,后者被映射到MongoDB文档中。

在NodeJS中使用Mongoose从集合中获取数据,你需要两个必要的东西:

  1. 模式: 它是一个包含属性及其类型(默认值、验证等)的文档结构,以键值对的形式呈现。
  2. 模型: 这是一个由定义的模式创建的类,MongoDB文档是模型的实例。因此,它充当MongoDB数据库的接口,用于创建、读取、更新和删除文档。

拥有模型后,我们可以在特定集合的模型上使用 find() 方法来获取集合的文档。

语法:

<Model_Name>.find(<query>,<projection>)
  • <query>:这是可选项。它指定了一个选择过滤器,用于使用各种MongoDB查询操作符过滤文档。如果没有传递参数,则返回所有文档。
  • <projection>:这是可选项。它包含我们想要返回给与查询过滤器匹配的文档的字段。如果没有传递参数,则返回所有字段。

安装Mongoose:

步骤1: 您可以访问链接安装Mongoose模块。您可以使用以下命令安装此包。

npm install mongoose

步骤2: 现在你可以使用以下代码在你的文件中导入mongoose模块:

const mongoose = require('mongoose');

实现:

步骤1: 创建一个文件夹,并将model.js和main.js文件添加到其中。

  • model.js: 它包含了您想要使用的所有集合的模式和模型,然后我们导出所有创建的模型,以便可以将其导入到从不同集合中获取数据的文件中。
  • main.js: 这是主要的服务器文件,在此文件中,我们将从两个不同的集合中获取数据。

步骤2: 在model.js文件中写下以下代码。

model.js

// Requiring module 
const mongoose = require('mongoose'); 
    
// Course Modal Schema 
const courseSchema = new mongoose.Schema({ 
    _id: Number, 
    name: String, 
    category: String 
}); 
    
// Student Modal Schema 
const studentSchema = new mongoose.Schema({ 
    name: String, 
    enroll: Number, 
    courseId: Number 
}); 
     
// Creating model objects 
const Course = mongoose.model('course', courseSchema); 
const Student = mongoose.model('student', studentSchema); 
    
// Exporting our model objects 
module.exports = { 
    Student, Course 
}

数据库: 我们已经在我们的 “Courses” 和 “Students” 集合中有文档,我们将从中获取数据,如下所示:

如何使用Node.js从MongoDB的两个不同集合中获取数据

步骤3: 可以使用mongoose轻松建立数据库连接,如下所示:

mongoose.connect('mongodb://localhost:27017/GFG',
{  
  useNewUrlParser: true,  
  useUnifiedTopology: true,  
  useFindAndModify: false
});

步骤4: 在 main.js 文件中写入以下代码。

main.js

// Requiring mongoose module 
const mongoose = require('mongoose'); 
  
// Importing Models Student and Course from model.js 
const { Student, Course } = require('./model'); 
  
// Connecting to database 
mongoose.connect('mongodb://localhost:27017/GFG', 
    { 
        useNewUrlParser: true, 
        useUnifiedTopology: true, 
        useFindAndModify: false
    }); 
  
var dbcourse = []; 
  
// Finding courses of category Database 
Course.find({ category: "Database" }) 
    .then(data => { 
        console.log("Database Courses:") 
        console.log(data); 
  
        // Putting all course id's in dbcourse array 
        data.map((d, k) => { 
            dbcourse.push(d._id); 
        }) 
  
        // Getting students who are enrolled in any 
        // database course by filtering students 
        // whose courseId matches with any id in 
        // dbcourse array 
        Student.find({ courseId: { $in: dbcourse } }) 
            .then(data => { 
                console.log("Students in Database Courses:") 
                console.log(data); 
            }) 
            .catch(error => { 
                console.log(error); 
            }) 
    }) 
    .catch(error => { 
        console.log(error); 
    })

步骤5: 使用以下命令运行 main.js 文件:

node main.js

解释:

在上述代码中,文件 main.js 中,我们获取所有 Course 集合中分类为 Database 的文档,然后将每个课程的 _id 存储在 dbcourse 数组中,接着获取所有在任何 Database 分类的课程中注册的学生文档。

输出:

我们在下方的控制台中获取来自两个不同集合 Courses 和 Students 的数据:

如何使用Node.js从MongoDB的两个不同集合中获取数据

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程