node操作mongodb数据库

mongodb

##基本概念

  1. 可以有多个数据库
  2. 一个集合可以有多个文档
  3. 文档结构灵活,没有任何限制
  4. 安装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
  1. 引入mongoose
  var mongoose = require('mongoose');
  1. 设计表集合结构 使用mongoose中的Schema方法
  var Schema = mongoose.Schema
  1. 连接数据库
 idtest有此数据库连接,没有创建 使用 mongoose.connect()
 mongoose.connect('mongodb://localhost/idtest');
  1. 设计集合结构
   var userSchema = new Schema({
   	username: {
   		type: String,
   		require: true
   	},
   	password: {
   		type: String,
   		require: true
   	},
   	email: {
   		type: String
   	}
   });
  1. 将设计的表结构发布为model模型
  • mongoose.model 方法将一个架构发布为model
  • 第一个参数:传入一个大写名词数字字符串,用来表示数据库名称
  • mongoose会自动将大写名词字符串生成小写的复数的集合名称
  • 第二个参数就是架构 userSchema
//返回值: 模型构造函数
var User = mongoose.model('User', userSchema);
  1. 当我们有了模型构造函数,就可以使用构造函数,对集合中的数据操作(增、删、改、查);
  • 添加数据 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');
    })
})

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值