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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

         在讲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" 是什么看一下原文档如下就是设置架构的默认严格查询模式可能是falsetrue或者throw

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

mongoose.set('strictQuery', true);

3. 调试测试运行


Schema 

         MongoDB 只有集合和文档并不像MySQL中有表结构在MongoDB数据库中的每一条文档可以是完全不一样的数据结构那么就需要一个规范 —— SchemaSchema只是规范存放文档数据类型并没有操作数据库的能力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数据库的连接以及增删改查的操作感谢大家的支持

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go数据库