mongodb
##基本概念
- 可以有多个数据库
- 一个集合可以有多个文档
- 文档结构灵活,没有任何限制
- 安装mongodb后,记得配置全局变量
配置方法
右击我的电脑>属性>高级系统设置>环境变量>用户变量>Path
最后把安装后的MongoDB软件的目录地址放在Path中
C:\Program Files\MongoDB\Server\4.2\bin
配置成功后
用mongo --version 查看是否配置成功
展示一下代码说明配置成功
MongoDB shell version v4.2.6
git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8
allocator: tcmalloc
modules: none
build environment:
distmod: 2012plus
distarch: x86_64
target_arch: x86_64
一.启动
- mongodb默认使用执行 mongodb命令所处的盘符根目录下的data文件,然后在data文件里面创建一个db文件 作为自己的存储目录
- 所以第一次执行该命令之前自己先新建一个这样的目录 data>db
- 然后执行 mongod命令就启动了
二.如果想要修改的数据存储目录
mongod --dbpath '数据存储目录'
三.停止
直接关闭控制台或者ctrl+c
四.连接和退出
# 该命令直接连接本地mongodb
执行 mongo
# 退出
执行 exit
五.基本命令
查看所有数据库
1. show dbs
切换到指定的数据库(如果没有会新建)
use '数据库名称'
//查询集合
show collections
//查看集合数据
db.cats.find()
六. Node中如何操作mongodb
- 用node官方提供的包 mongoose来操作MongoDB数据库
- mongoose对MongoDB进行了封装
npm i mongoose --save
- 引入mongoose
var mongoose = require('mongoose');
- 设计表集合结构 使用mongoose中的Schema方法
var Schema = mongoose.Schema
- 连接数据库
idtest有此数据库连接,没有创建 使用 mongoose.connect()
mongoose.connect('mongodb://localhost/idtest');
- 设计集合结构
var userSchema = new Schema({
username: {
type: String,
require: true
},
password: {
type: String,
require: true
},
email: {
type: String
}
});
- 将设计的表结构发布为model模型
- mongoose.model 方法将一个架构发布为model
- 第一个参数:传入一个大写名词数字字符串,用来表示数据库名称
- mongoose会自动将大写名词字符串生成小写的复数的集合名称
- 第二个参数就是架构 userSchema
//返回值: 模型构造函数
var User = mongoose.model('User', userSchema);
- 当我们有了模型构造函数,就可以使用构造函数,对集合中的数据操作(增、删、改、查);
- 添加数据 save()方法
var admin = new User({
username: 'admin',
password: '123456',
email: 'admin@qq.com'
})
//持久化保存 admin实例
admin.save().then((ret) => console.log(ret)).catch(() => {
console.log('保存失败')
})
- 查询数据 find()方法查询所有 findOne()方法按照条件查询
//查询所有数据
User.find(function(err,ret){
if(err){
}else{
console.log(ret);
}
})
//按照条件查询
User.find({
username:'admin'
},function(err,ret){
if(err){
}else{
console.log(ret);
}
})
//按照条件查询返回一个符合条件的对象
User.findOne({
username:'admin'
},function(err,ret){
if(err){
}else{
console.log(ret);
}
})
- 删除数据 remove() 方法删除所有 findByIdAndRemove()方法根据id 删除
//删除所有
User.remove(function(err,data){
if(err){
console.log('删除失败');
}else{
console.log('删除成功');
}
})
//根据id删除
User.findByIdAndRemove('id',function(){
})
- 更新数据 findByIdAndUpdate()方法根据id 更改
//根据id更新
User.findByIdAndUpdate('60375b7750a74315702c91b0', {
password: '123',
},
function(err, data) {
if (err) {
console.log('更新失败');
} else {
console.log('更新成功');
}
}
)
七、Node操作mongoDB实战
- students.js文件为创建数据库文件
var mongoose = require('mongoose');
//连接数据库
mongoose.connect('mongodb://localhost/itcast');
var Schema = mongoose.Schema;
var commentsSchema = new Schema({
name:{
type:String,
require:true
},
gender:{
type:Number,
enum:[0,1],
default:0
},
age:{
type:Number,
require:true
}
})
module.exports = mongoose.model('Student',commentsSchema)
- router.js文件 引入 students.js
var express = require('express')
//express中有一个Router方法
var router = express.Router();
var Student = require('./students');
//然后 router.get()使用路由
//查询数据 find()查询所有数据
router.get('/students', function (req, res) {
Student.find(function (err, students) {
if (err) {
return res.status(500).send('Server error');
}
res.render('students.html', {
students: students
})
})
})
//增加保存学生接口 实例化数据库 new Student(req.body),然后用save()方法持久保存到数据库里面
router.post('/students/new', function (req, res) {
new Student(req.body).save(function (err) {
if (err) {
return res.status(500).send('Server error');
}
res.redirect('/students')
})
})
//根据id 用findById()方法根据id查询单个信息
router.get('/students/edit', function (req, res) {
Student.findById(req.query.id, function (err, student) {
if (err) {
return res.status(500).send('Server error');
}
res.render('edit.html', {
student: student
})
})
})
//编辑接口 findByIdAndUpdate()方法更新数据
router.post('/students/edit', function (req, res) {
//获取表单数据
Student.findByIdAndUpdate(req.body.id,req.body, function (err) {
if (err) {
return res.status(500).send('Server error');
}
res.redirect('/students')
})
})
//删除接口 findByIdAndRemove()方法根据id删除单个信息
router.get('/students/delete', function (req, res) {
Student.findByIdAndRemove(req.query.id,function(err,data){
if (err) {
return res.status(500).send('Server error')
}
res.redirect('/students');
})
})