十九、Node.js 操作MongoDB (Mongoose) 数据库

         在讲Node.js通过使用mongoose模块来操作MongoDB数据库之前首先是关于MongoDB数据库的安装和MongoDB服务以及对MongoDB命令行的操作和可视化工具MongoDBCompass的一个基本使用;那么在这里已经准备好了关于MongoDB数据库的内容了:


MongoDB数据库安装详细 :  MongoDB数据库安装详细教程

MongoDB 数据库命令行操作 :  MongoDB数据库命令行操作

MongoDB 数据库图形化工具操作 :  1. MongoDBCompass   2. Navicat for Premium 16


        mongoose是一个对象模型工具,可以通过它在Node.js异步环境下对MongoDB数据库安装,是MongoDB提供的一个库,可以通过它操作数据库;回顾MySQL数据库是通过引用mysql模块,通过query()方法来执行sql语句操作数据库,话不多说,先来局部安装mongoose模块;

引入模块

1. 使用npm包管理器安装 mongoose

npm install mongoose --save

2. 引入mongoose

const mongoose = require('mongoose');

        在连接数据库之前请确保 MongoDB Server 服务已经启动成功;如果未启动,请通过前面MongoDB 相关的篇目当中查看 :


连接数据库

        连接MongoDB数据库需要知道数据库的一些信息,如在MySQL数据库中需要知道数据库的host,user,password,database 这些参数创建连接对象后通过connect() 方法连接,那么MongoDB中需要知道的是这个三个 :  配置好的URL 、 端口号 、数据库名;然后通过connect() 方法连接;还记得在使用MongoDBCompass图形化工具中要先连接数据库吗?如下:

         通过以上就可以得到MongoDB数据库的配置信息(URL、prot(端口号)、database(数据库))

1. 代码编写:

const mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/syan',function(err){
    if(err){
        console.log("—— 连接异常 ——");
    }else{
        console.log("—— 连接成功 ——");
    }
});

 2. 测试运行:

(node:24680) [MONGOOSE] DeprecationWarning: Mongoose: the `strictQuery` option will be switched back to `false` by default in Mongoose 7. Use `mongoose.set('strictQuery', false);` if you want to prepare for this change. Or use `mongoose.set('strictQuery', true);` to suppress this warning.       
(Use `node --trace-deprecation ...` to show where the warning was created)

        显示 "连接成功" 有这一段不推荐这么做的警告⚠,在Mongoose 7中的 "strictQuery" 选项将会变成 "false"," strictQuery" 是什么?看一下原文档:如下就是设置架构的默认严格查询模式,可能是false,true或者throw;

        根据提示的警告,如果你不想看到此警告,可以这样来添加代码设置一下:

mongoose.set('strictQuery', true);

3. 调试测试运行:


Schema 

         MongoDB 只有集合和文档,并不像MySQL中有表结构,在MongoDB数据库中的每一条文档可以是完全不一样的数据结构,那么就需要一个规范 —— Schema,Schema只是规范存放文档数据类型并没有操作数据库的能力;Schema支持的数据类型有String 、Number、Date、Buffer、Boolean、Array、ObjectId和Mixed;

规范编写:

// 构造函数 new mongoose.Schema
const docSchema = new mongoose.Schema({
    Name : String,
    Age : Number,
    Sex : String,
    cardId : Number
});

        Schema仅定义了文档的框架,让每一个Schema都与MongoDB数据库中的集合对应,Schema和Model是定义和生成collection(集合) 和 document(文档) 过程的工具;Model是什么呢?

Model

        Schema编译而成的构造器是Model,包含抽象属性和行为,每一个实例化后的Model实际上是一个文档,可以实现对数据库的操作;通过 model() 方法创建Model时,格式如下:

mongoose.model(参数1,参数2,参数3);
参数1 : modelName —— 映射数据库中的集合名;
参数2 : Schema —— 创建Schema的对象名;
参数3 : 可选,代表数据库集合名;设置了会与第三参数的集合建立连接操作该集合,反之则会与(参数1 + s )建立连接;
mongoose.model("sen",senSchema);          // 连接的是 <sens集合>
mongoose.model("sen",senSchema,"lin");    // 连接的是 <lin集合>

 注: 在操作文档使用一些方法进行增删查改的时候,需要注意一些Api是否已经被弃用了,在使用的时候报错会有提醒API是否已被弃用;

 操作文档

        可以通过Schema来创建Model对应数据库中的collection,通过Model对MongoDB数据库进行操作:

        下面来对syan数据库下的sen集合中添加一条文档内容;先来通过CMD命令或者MongoDB查看syan数据库中的sen集合中由几条文档内容;

        有两条数据内容,下面通过编写代码来往数据库中添加一条文档:

const mongoose = require('mongoose');
mongoose.set('strictQuery', true);
mongoose.connect('mongodb://127.0.0.1:27017/syan',function(err){
    if(err){
        console.log("—— 连接异常 ——");
    }else{
        console.log("—— 连接成功 ——");
    }
});

// 增

// 数据类型
const insertSchema = new mongoose.Schema({
    name:String,
    age:Number
});

// Model
const insertModel = mongoose.model("syan",insertSchema,"sen");

// 添加数据内容 —— <name> : 'LIN',<age> : 18
let addContent = {
    name:'LIN',
    age:18
}

insertModel.insertMany(addContent,function(err){    
    if(err){
        console.log("!! 添加失败 !!");
    }else{
        console.log("++ 添加成功 ++");
    }
});

通过图形化工具查询一下sen集合中的文档内容:(多添加了一条内容);

 查

        下面来查询一下sen集合中的一条name字段为 "YAN" 和age字段为 "18"的文档信息;

1. 代码编写 (代码都重新编写,以此来记忆)

... 连接 ...
// 查

// 数据类型
const checkSchema = new mongoose.Schema({
    name:String,
    age:Number
});

// Model
const checkModel = mongoose.model("syan",checkSchema,"sen");

// 查询数据 —— <name>: 'YAN'
let findContent = {
    name:'YAN',
    age:18
}

checkModel.find(findContent,function(err,data){
    if(err){
        console.log("!!查询失败!!");
    }else{
        console.log("—— 查询成功 ——");
        console.log(data);
    }
});

2. 测试运行

 改

        下面继续来修改sen集合中的一条字段name名为"LIN"的文档信息修改为 <name> : "ZEN",<age> : "18".

1 . 代码编写

... 连接 ...
// 改

// 数据类型
const updateSchema = new mongoose.Schema({
    name:String,
    age:Number
}) 

// Model 
const updateModel = mongoose.model("syan",updateSchema,"sen");

// 修改的条件
const querys = {
    name:'LIN',
    age:18
}

// 修改的内容
const updateContent = {
    name:'ZEN',
    age:18
}

updateModel.updateOne(querys,{$set:updateContent},function(err){
    if(err){
        console.log("!!修改失败!!");
    }else{
        console.log("** 修改成功 **")
    }
});

2. 测试运行 

        下面来删除sen集合中的一条文档记录,<name> : "ZEN",<age> : "18";

1. 代码编写

// 删

// 数据类型
const delSchema = new mongoose.Schema({
    name:String,
    age:Number
})

// Model
const delModel = mongoose.model("syan",delSchema,"sen");

// 删除的内容
const delContent = {
    name:'ZEN',
    age:18
}

// 有些api已经被弃用了,如remove
delModel.deleteMany(delContent,function(err){
    if(err){
        console.log("!!删除失败!!")
    }else{
        console.log("-- 删除成功 --")
    }
});

2. 测试运行

        以上就是在 Node.js 中使用mongoose来操作MongoDB数据库对集合中的文档进行增删查改操作;那么本篇目就到此结束,在下一篇中在Express框架中完成MongoDB数据库的连接以及增删改查的操作,感谢大家的支持!

猜你喜欢

转载自blog.csdn.net/weixin_52203618/article/details/128279298