📌  相关文章
📜  如何使用 Node.js 从 2 个不同的 mongoDB 集合中获取数据?

📅  最后修改于: 2022-05-13 01:56:53.941000             🧑  作者: Mango

如何使用 Node.js 从 2 个不同的 mongoDB 集合中获取数据?

Mongoose是 MongoDB 的对象数据建模 (ODM) 库。它定义了一个强类型模式,具有默认值和模式验证,稍后将映射到 MongoDB 文档。

为了在 NodeJS 中使用Mongoose从集合中获取数据,您必须具备两个必要的条件:

  1. Schema:它是一个文档结构,包含作为键值对的属性及其类型(默认值、验证等)。
  2. Model :它是在定义的 Schema 的帮助下创建的类,MongoDB 文档是 Model 的实例。因此,它充当 MongoDB 数据库的接口,用于创建、读取、更新和删除文档。

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

句法:

.find(,)
  • 它是可选的。它指定了一个选择过滤器,用于使用各种 MongoDB 查询运算符过滤文档。如果未通过,则返回所有文件。
  • <投影> 它是可选的。它包含我们希望返回到与查询过滤器匹配的文档的字段。如果未通过,则返回所有字段。

安装Mongoose:

第 1 步:您可以访问链接 Install mongoose来安装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
}


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 arrray
        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);
    })


数据库:我们的课程学生集合中已经有文档,我们将从中获取数据,如下所示:

数据库 GFG 中的收藏课程和学生

第 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 arrray
        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集合的所有文件 其类别为数据库,然后将每门课程的_id存储在dbcourse数组中,然后从学生集合中获取所有文档,该学生集合已注册任何类别数据库的课程。

输出:我们在如下所示的控制台中从两个不同的集合 Courses 和 Students 中获取数据:

执行 main.js 后的输出