Nodejs连接mongoDB数据库
- 一、连接mongoDB数据库
- 二、连接数据库操作步骤
- 1、安装 mongoose
- 2、引用
- 3、创建js文件用于连接MongoDB数据库
- 三、实现增删改查操作
- 1、插入数据
- 2、更新数据
- 3、查询数据
- 4、删除数据
一、连接mongoDB数据库
在我们安装配置完成之后,连接MongoDB数据库先要开启MongoDB的服务。要开启MongoDB数据库服务,我们先进入MongoDB数据库安装目录的bin目录:
进入后我们执行以下命令:
打开可视化工具连接(这里我使用的是Robomongo)
此时数据库便连接成功了,然后就是实现在nodejs中连接数据库了。
首先了解一下 Mongoose,它是在node.js环境中对MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为javascript对象供我们使用。在实现数据库连接操作中,我们还需要了解一下三个概念.
Schema
: 它是一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力,仅仅只是数据库在程序片段中的一种表现,可以理解为表结构。Model
: 由Schema发布生成的模型,具有抽象属性和行为的数据库操作。Entity
: 由Model创建的实体,它的操作也会影响数据库。
Schema、Model、Entity的关系:Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。
二、连接数据库操作步骤
1、安装 mongoose
npm install mongoose
2、引用
var mongoose = require('mongoose');
3、创建js文件用于连接MongoDB数据库
//引入mongoose
const mongoose = require('mongoose');
//定义字符串常量
const db_url = "mongodb://localhost:27017/zxh"
//1.连接数据库
mongoose.connect(db_url,{useNewUrlParser:true,useUnifiedTopology:true})
//2.连接成功
mongoose.connection.on('connected',function(){
console.log('连接成功:',db_url);
})
//3.连接失败
mongoose.connection.on('error',function(err){
console.log('连接错误:',err);
})
//4.断开连接
mongoose.connection.on('disconnection',function(){
console.log('断开连接');
})
module.exports = mongoose;
运行终端,得到以下结果
三、实现增删改查操作
1、插入数据
1)创建UserSchema:设计文档结构
//定义UserSchema的Schema
const UserSchema = new Schema({
username:{
type:String
},
password:{
type:String
},
age:{
type:Number
}
});
- 将文档结构发布为模型
const UserModel = mongoose.model('UserModel',UserSchema)
其中,mongoose.model 方法就是用来将一个架构发布为 model;其中:
第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称,其中,mongoose会自动将大写名词的字符串生成小写复数的集合名称,例如这里的UserModel最终会变成 usermodels 集合名称。
第二个参数:架构 Schema
返回值:模型构造函数
3)插入数据(Model.save([fn])):
//创建模型
let Model = new UserModel({
username:'小明',
password:'123456',
age:18
})
//2.同模型的sava([fn]),保存模型到数据库中
Model.save(function(err,res){
if(err){
console.log('保存失败:',err);
}else{
console.log(res);
}
})
打开mongo 数据库,可以看到数据被插入进去(便于后续操作,于是多添加了几条数据)
2、更新数据
Model.updateOne(conditions, doc, [options], [callback])
conditions: 更新的条件,该值是一个对象。
doc: 需要更新的内容,该值也是一个对象。
options:可选参数,它有如下属性:
safe :(布尔型)安全模式(默认为架构中设置的值(true))
upsert :(boolean)如果不匹配,是否创建文档(false)
multi :(boolean)是否应该更新多个文档(false)
runValidators:如果为true,则在此命令上运行更新验证程序。更新验证器根据模型的模式验证更新操作。
strict:(布尔)覆盖strict此更新的选项
overwrite: (布尔)禁用只更新模式,允许您覆盖文档(false)
callback: 回调函数
function update(){
//找到更新的数据
let where_str = { 'username' : '小明'};
//更新后的数据
let update_str = { 'password' : 'abcdefg'};
UserModel.updateOne(where_str,update_str,function(err,res){
if(err){
console.log('更新失败:',err);
}else{
console.log(res);
}
})
}
update() //调用更新函数
密码成功更改!
第二种更新方法
2)更新并返回数据:终端返回更新前的所有数据,数据库响应更新后的数据
Model.findOneAndUpdate([(conditions, doc, [options], [callback])]
conditions: 第一个参数是一个对象参数,是用于查询与之相匹配的数据用的
doc:第二个参数也是一个对象参数,用于修改查询到的数据中的某条信息
options:第三个参数也是一个对象参数,主要用于设定匹配数据与更新数据的一些规定,比较复杂,一般用不到
callback:第四个参数也就是我们最熟悉的回调函数,函数默认传入两个参数,err、data。当数据库发生错误的时候传回一个err,若数据库正常,err为空;当正常根据第一个参数查询到相关数据并成功修改了我们设定的数据,data返回修改前的数据信息,若根据第一个参数没有查询到相关数据,data为null
UserModel.findOneAndUpdate({
username: '小张'
},{
$set: {
password: 'aaaaaaaaaa'
}
},{},function(err,data){
if(err){
console.log("更新错误!");
}
else if(!data) {
console.log("未找到数据!");
console.log(data);
}
else if(data) {
console.log("更新成功!");
console.log(data);
}
})
看终端打印结果:为更改前的数据
数据库中返回的数据为更改后的密码
3、查询数据
//查询所有
UserModel.find(function(err,data){
if(err){
console.log(err)
}else{
console.log(data)
}
})
//按id查询
UserModel.findById({_id:"61e91a69455a152a1c3dd150"},function(err,data){
if(err){
console.log(err)
}else{
console.log(data);
}
})
//记录数查询
UserModel.countDocuments(function(err,data){
if(err){
console.log(err)
}else{
console.log("记录数:"+data);
}
})
4、删除数据
UserModel.deleteOne({
username: '小张'
},{},function(err,data){
if(err){
console.log('删除错误!');
}
else if(!data) {
console.log("未找到数据!");
console.log(data);
}
else if(data) {
console.log("删除成功!");
console.log(data);
}
})
查看数据库,成功删除小张信息。