在讲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数据库的连接以及增删改查的操作,感谢大家的支持!