Node.js操作MongoDB数据库

MongoDB数据库

关系数据库类如mysql等

NoSql(not only sql),不仅仅是SQL

具体内容可参考网上的菜鸟教程文档

http://www.runoob.com/mongodb/mongodb-connections.html

MongoDB是关系数据库

最像关系型数据库的非关系数据库

两者对比:

数据库 --> 数据库

数据表 --> 集合(数组

表记录 --> 文档对象

不需要设计表结构,任意往里面增加数据

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

下载安装

进入官网下载,找到对应的版本,选择社区版即可

https://www.mongodb.com/

MongoDB安装-

按照教程点击next,下图complete表示完整安装,Custom表示自定义安装,可改变安装路径,但是不介意更改,除非C盘满了,此处选择后者

配置环境变量

打开默认安装目录

C:\Program Files\MongoDB\Server\4.0\bin

打开环境变量配置窗口,将以上复制的路径进行操作。在系统变量中找到path。编辑>新建>将复制的粘贴进去,点击确定就完成了。

打开控制台,输入,如果输出如下版本信息,表示安装并配置成功

启动和关闭数据库

# MongoDB默认使用执行mongod命令所处盘符根目录下的/data/db作为自己数据的存储目录

# 所以在启动之前需要自己手动创建一个/data/db用于存放

# 我安装在C盘,所以在C盘根目录下创建/data/db

# 控制台输入:

`mongod`

# 已启动数据库,不要关闭控制台

# 关闭数据库:在控制台Ctrl+C即可

连接数据库

新开一个控制台,输入,默认连接本地的MongoDB

打开之后输入,断开数据库

基本命令

查看显示所有数据库

切换到指定的数据(如果没有会新建)

查看当前操作的数据库

插入数据:调用API即可

查看数据

Node.js中操作MongoDB数据库

使用官方的包来操作

#在https://www.npmjs.com/上搜索mongodb,找到用Node.js连接的包

https://github.com/mongodb/node-mongodb-native

使用第三方来操作数据库

# 官网

https://mongoosejs.com/

# 官方API

https://mongoosejs.com/docs/models.html

使用准备

# 新建一个mongodb-demo的项目

# 初始化npm

npminit-y

# 下载mongoose

npminstallmongoose

# 将官网上的连接示例代码粘贴到demo1.js中

// 加载,默认的:

constmongoose=require('mongoose');

// 连接mongoDB数据库

mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser:true});

// 创建一个模型,就是在设计数据库

// MongoDB是动态的,非常灵活,只要在代码中设计数据库就行了

// mongoose这个包就可以让你的设计编写过程非常简单

// Cat表名,第二个参数为数据结构,文档中有name

constCat=mongoose.model('Cat', {name:String});

// 创建实例化一个对象Cat

constkitty=newCat({name:'Zildjian'});

// 持久化保存实例

kitty.save().then(()=>console.log('meow'));

4.1 创建一个自己的数据库

varmongoose=require('mongoose')

// 获取模式架构

varSchema=mongoose.Schema

// 1. 连接数据库,不存在会自动创建

mongoose.connect('mongodb://localhost/itcast')

// 2. 通过代码设计集合结构(表结构)

// 字段名称就是表结构中的属性名称

// 比如设计一个用户表

varuserSchema=newSchema({

username: {

type:String,

required:true// 要求用户名必须有

},

password: {

type:String,

required:true

},

email: {

type:String

}

});

// 3. 将模板结构发布为模型

// 该方法为将架构发表为模型的方法

// 第一个参数,传入一个大写名词来表示数据库名称,mongoose会自动变成小写复数集合名称,此处会变为users

// 第二个参数架构Schema

// 返回值:模型构造函数

varUser=mongoose.model('User',userSchema);

4.2 插入数据

// 4.1 插入一个用户

// 写入数据

varadmin=newUser({

username:'admin',

password:'admin',

email:'admin@.admin.com'

})

// 持久化保存实例

admin.save(function(err,ret) {

if(err) {

console.log('保存失败')

}else{

console.log('保存成功')

console.log(ret);

}

})

4.3 查询数据

4.3.1 查询所有数据

// 4.2 查询所有数据

User.find(function(err,ret) {

if(err) {

console.log('查询失败')

}else{

console.log(ret)

}

})

4.3.2 按照条件查询

User.find({

username:'袁素丹'// 此处存放条件

},function(err,ret) {

if(err) {

console.log('查询失败')

}else{

console.log(ret)

}

})

// 只查询第一个出现的

User.findOne({

username:'袁素丹'// 此处存放条件

},function(err,ret) {

if(err) {

console.log('查询失败')

}else{

console.log(ret)

}

})

4.4 更新数据

// 第一个参数为更新的id,第二个为要更新的东西,第三个参数回调

User.findByIdAndUpdate('5c468ca305c7ad3944bbd741',{

password:'123'

},function(err,ret) {

if(err) {

console.log('更新失败')

}else{

console.log('更新成功')

}

})

4.5 删除数据

User.remove({

username:'钟天福'

},function(err,ret) {

if(err) {

console.log('删除失败')

}else{

console.log(ret)

}

})

学生管理系统MongoDB数据库实现

1. 将文件操作实现的系统复制一份,更改文件操作的代码

开始的操作一致,导入各种包

首先对npm进行初始化

npminit-yes

导入art-template模块引擎和express-art-template,中间空格可同时安装多个

npminstall--saveart-template express-art-template

加载请求express,使用服务器

varexpress=require('express')

varapp=express()

app.get('/',function(req,res) {

})

// 监听使用端口

app.listen(3000)

开放public和node_modules模板引擎的目录

app.use('/node_modules',express.static('./node_modules/'))

app.use('/public',express.static('./public/'))

加载express-art-template模板引擎

// 第一个参数表示读取数据的后缀名

app.engine('html',require('express-art-template'))

在处理get请求有express足够了,但是处理post请求的时候需要使用的一个插件:body-parser。get和post为表单提交的两种方式。

// 安装

npminstallbody-parser

// 加载

varbodyParser=require('body-parser')

// 使用

app.use(bodyParser.urlencoded({extended:false}))

app.use(bodyParser.json())

此处将app.get的各种方法独立出来,用路由的方式指过去使用,因此需要加载路由并挂载路由在app.js上

// 加载路由,根目录下的文件

varrouter=require('./router')

// 挂载路由,一般放在各模块最后面,监听之前

app.use(router)

除以上原有操作外,需要安装

npminstall mongoose

页面改动

//--------------new.html增加学生界面---------

value中的id要改为数据库格式的_id

//--------------edit.html增加学生界面---------

value中的id要改为数据库格式的_id

路由中的代码更改为数据库API提供的方法,无需大改

// 路由处理

// 文件读取

// 具体的处理方法在student.js中

varfs=require('fs')

// 加载express模块

varexpress=require('express')

// 用express中专门用来处理路由的方法创建一个路由

varrouter=express.Router()

// 额外封装了一个学生类,定义了对学生的各种操作的方法

varStudent=require('./student')

// ----------------------开始使用express的各种方法-----------

// 展示所有学生信息的首页,查询所有学生

router.get('/students',function(req,res) {

// 调用student.js中导出的find方法

Student.find(function(err,students) {

// 展示不成功时,输出错误在页面上

if(err) {

returnres.status(500).send('Server Error...')

}

// 成功时,使用express中的render方法,进入到index.html页面

// 展示所有的学生

res.render('index.html',{

students:students

})

})

})

// 增加一个学生的页面

router.get('/students/new',function(req,res) {

res.render('new.html')

})

// 处理增加学生表单的方法

router.post('/students/new',function(req,res) {

newStudent(req.body).save(function(err){

if(err) {

returnres.status(500).send('Server Error...')

}

// 处理成功,将页面重新加载到students页面

res.redirect('/students')

})

})

// 填写更新学生信息的表单

router.get('/students/edit',function(req,res) {

// 需要找到当前的学生信息再跳转

// replace是将id中的“”号去掉,使用了正则表达式,g表示全局

Student.findById(req.query.id.replace(/"/g,''),function(err,student) {

if(err) {

console.log(err);

returnres.status(500).send('Server Error...')

}

// 如果获取当前信息成功了则跳转到更新学生界面

// 遍历这个学生的每一个属性

res.render('edit.html', {

student:student

})

})

})

// 处理更新一个学生的表单的方法

router.post('/students/edit',function(req,res) {

varid=req.body.id.replace(/"/g,"")

Student.findByIdAndUpdate(id,req.body,function(err) {

if(err) {

returnres.status(500).send('Server Error...')

}

res.redirect('/students')

})

})

// 删除学生的操作

router.get('/students/delete',function(req,res) {

varid=req.query.id.replace(/"/g,"")

Student.findByIdAndRemove(id,function(err) {

if(err) {

returnres.status(500).send('Server Error...')

}

res.redirect('/students')

})

})

// 将router导出,使app.js可以挂载成功

module.exports=router

// 加载

varmongoose=require('mongoose')

// 连接数据库

mongoose.connect('mongodb://localhost/itcast',{useMongoClient:true})

varSchema=mongoose.Schema

// 创建模式

varstudentSchema=newSchema( {

name: {

type:String,

required:true

},

gender: {

type:Number,

// 枚举

enum: [,1],

default:

},

age: {

type:Number

},

hobbies: {

type:String

}

})

// 创建模型,将模式发布为模型

module.exports=mongoose.model('Student',studentSchema)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190122G0SVGG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券