如何使用 Node.js 从 2 个不同的 mongoDB 集合中获取数据?
Mongoose是 MongoDB 的对象数据建模 (ODM) 库。它定义了一个强类型模式,具有默认值和模式验证,稍后将映射到 MongoDB 文档。
为了在 NodeJS 中使用Mongoose从集合中获取数据,您必须具备两个必要的条件:
- Schema:它是一个文档结构,包含作为键值对的属性及其类型(默认值、验证等)。
- 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);
})
数据库:我们的课程和学生集合中已经有文档,我们将从中获取数据,如下所示:
第 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 中获取数据: