NodeJs Express框架操作MongoDB数据库执行方法讲解
作者:秃头小宋s 发布时间:2024-01-25 08:59:08
1、Mongoose模块
(1)是一个对象模型工具,是对Node.js环境下操作MongoDB数据库进行了封装,可以将MongoDB数据库中的数据转换成JavaScript对象供用户使用。
(2)名词:
Schema:它是一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力,仅仅只是数据库在程序片段中的一种表现,可以理解为表结构。
Model:由Schema发布生成的模型,具有抽象属性和行为的数据库操作
Entity:由Model创建的实体,它的操作也会影响数据库
(3)命名规范:驼峰命名 例:
PersonSchema:Person对应的Schema ,Person的文本属性(表结构)
PersonModel:Person对应的Model
PersonEntity:Person对应的Entity
Schema生成Model,由Model生成Entity,Model和Entity都可以操作数据库,Model的可操作性更强。
2、Mongoose模块的使用
(1)安装:npm install mongoose
(2)创建数据库连接文件
// 导入mongoose模块
const Mongoose = require('mongoose');
// 定义MongoDB数据库的连接字符串:协议://主机地址:端口号/数据库名
const mdb_url = 'mongodb://localhost:27017/my_test';
/*
建立和MongoDB数据库的连接
useNewUrlParser:是否使用新的url地址转换方式
useUnifiedTopology:是否使用新的用户安全策略
*/
Mongoose.connect(mdb_url,{useNewUrlParser:true,useUnifiedTopology:true});
// 对连接过程进行处理
// 建立连接 ——连接成功触发connected事件
Mongoose.connection.on('connected',()=>{
console.log('数据库连接成功~'+mdb_url);
})
// 连接异常 ——回调函数的参数中保存了异常的信息
Mongoose.connection.on('error',(e)=>{
console.log(e);
})
//断开连接 ——断开连接触发
Mongoose.connection.on('disconnected',()=>{
console.log('断开数据库的连接~');
})
// 导出mongoose
module.exports = Mongoose;
(3)创建Schema,再由Schema创建Model
Schema:定义的是与集合对应的骨架。Schema中的属性对应的是MongoDB中集合的key。
是Schema的实例,用于操作MongoDB中的集合中的文档。
3、关于模型名称和数据库中集合名称的对应关系
(1)数据库中没有集合
mongoose.model('Admin',AdminSchema) ——>在模型名后加s就是集合名(不区分大小写) ——admins
mongoose.model('Admin',AdminSchema,'admin')——>第三个参数就是用于定义的集合名称
(2)数据库中有集合
mongoose.model('Admin',AdminSchema,'数据库中已有的集合名')
4、mongoose的基本操作
(1)插入文档:save方法
先使用Model创建Entity
然后使用Entity调用save方法
const AdminModel = require('../model/adminModel');
// 通过model创建一个对象
const admin = new AdminModel({
_id:'1005',
userName:'唐僧',
password:'123456',
address:'东土大唐'
})
/*
* 通过对象调用save方法向数据库中插入数据err存放的是保存失败后的信息 res是保存的对象
*/
admin.save((err,res)=>{
if(err){
console.log(err);
}else{
console.log(res);
}
})
(2)删除文档:findByIdAndDelete :直接通过Model调用,作用是根据文档的_id属性删除
(3)删除文档:deleteOne:直接通过Model调用,根据给定的条件删除文档
(4)更新文档:findOneAndUpdate,直接通过Model调用
findOneAndUpdate(条件,更新语句,{},回调函数)
AdminModel.findOneAndUpdate(
{'_id':'1004'}, //表示查询的条件
{$set:{'password':'789567'}}, //更新语句
null, //表示查询操作,通常为null
(err,data)=>{ //更新回调函数,err表示数据库的错误信息,data中存放的findOne查询到的文档
if(err){
console.log(err); //err表示数据库错误:查询、更新时数据库出现异常
}else if(!data){ //data为null时表示没有找到对应的文档
console.log('更新失败~');
}else if(data){ //data不为null时表示找到对应的文档
console.log('更新成功~')
}
})
(5)更新文档:updateOne(条件,更新语句,回调函数)
AdminModel.updateOne({'password':'123456'},{$set:{'password':'567890'}},(err,data)=>{
if(err){
console.log(err);
}
console.log(data.modifiedCount);
})
(6)查询所有:find
AdminModel.find((err,data)=>{
if(err){
console.log(err);
}
console.log(data);
})
(7)按_id查询:findById
AdminModel.findById({
'_id':'1004'
},(err,data)=>{
if(err){
console.log(err);
}
console.log(data);
})
(8)多条件查询:findOne 返回满足条件的第一条记录
AdminModel.findOne({
address:'三国',
password:'123456'
},(err,data)=>{
if(err){
console.log(err);
}
console.log(data)
})
(9)查询集合中的文档数量 :count
AdminModel.count((err,data)=>{
if(err){
console.log(err);
}
console.log('记录数:'+data);
})
来源:https://blog.csdn.net/m0_73634593/article/details/128209539


猜你喜欢
- 2007年1月,国务院 * 了中央“一号文件”,文件中对加快农业信息化建设有了更明确的部署,为新农村建
- 昨天美国雅虎正式宣布网站首页的新版,这也算互联网一件大事,尤其是对设计的朋友们。而且现在的美国雅虎的情况也不是很好的情况下有大刀阔斧的进行改
- 一 什么是读写分离虽然知道处理大数据量时,数据库为什么要做读写分离,原因很简单:读写分离是MySQL优化的一方面,它可以提高性能,缓解数据库
- Python的绘图库也允许用户创建优雅的图形,本章给大家介绍的是关于ggplot绘制画图的技巧,ggplot2建立在grid系统上,这个系统
- 我想要的结果无非是去掉URL路径中的index.php首先是配置.htaccess<IfModule mod_rewrite.c>
- 我们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4。 Python 3.9已经处于其开发的beta
- 本文实例为大家分享了Python实现感知器模型、两层神经网络,供大家参考,具体内容如下python 3.4 因为使用了 numpy这里我们首
- 关于模型保存的一点心得saver = tf.train.Saver(max_to_keep=3)在定义 saver 的时候一般会定义最多保存
- ah!其实没有标题说的那么严重!不过下面可是我们开发产品初期的一些血淋淋的案例,更多的安全威胁可以看看北北同学的《python hack》P
- 本文实例讲述了Python 字符串、列表、元组的截取与切片操作。分享给大家供大家参考,具体如下:demo.py(字符串、列表、元组的截取):
- 本文实例讲述了Python中map和列表推导效率比较。分享给大家供大家参考。具体分析如下:直接来测试代码吧:#!/usr/bin/env p
- 标记路径演示效果:实例代码import matplotlib.pyplot as pltimport matplotlib.path as
- 项目开发中hadoop一直装在虚拟机上,最近要迁移到服务器上。记录下迁移过程。一、为虚拟机添加一块新的硬盘虚拟机的初始硬盘只有30G,容不开
- Python面向对象编程(一)Python面向对象编程(二)Python面向对象编程(三)和其它编程语言相比,Python 在尽可能不增加新
- 编号标准宗地编码(landCode)所在区段编码(sectCode)1131001BG001G0012131001BG002G0013131
- 前些日子有网友问:将ASP纪录集输出成n列的的表格形式显示的方法?现在写了一个,方便大家使用。'定义变量 Dim cn,r
- uwsgi介绍uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作
- 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。排序,数字、字符串按照A
- 如果你正在运行使用MySQL的Web应用程序,那么你把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取
- 1.迭代器当您创建一个列表时,你可以逐个读取它的项。逐项读取其项称为迭代:mylist是一个可迭代的对象。当你使用列表解析式时,你创建了一个