数据库必知必会-MongoDB


1. 关系型数据库与非关系型数据库

  • 关系型数据库是指表与表之间存在联系
  • 所有关系型数据库在操作之前都要设计表结构
  • 所有关系型数据库都要通过sql语音来操作
  • 关系型数据库的表还支持约束
  • 非关系型数据库非常灵活(键值对)

2. MongoDB是最接近关系型数据库的非关系型数据库

  • 数据库→数据库;数据表→集合;表记录→文档对象

3. mongodb数据库的基本概念

数据库(大对象)→集合(数组)→文档(小对象)
{
	a(数据库):{
		aa(集合):[
			{"name":"junye1"},(文档1)
			{"name":"junye2"},(文档2)
		]
	}
	b(数据库):{
		bb(集合):[
			{"name":"junye3"},(文档3)
			{"name":"junye4"},(文档4)
		]
	}

}

MongoDB命令

  • 测试是否成功mongod --version测试是否成功
  • 开启服务mongod [–dbpath=数据存储目录路径]默认使用执行mongod命令所处盘符根目录下的/data/db作为数据存储目录,所以在执行第一次命令的时候手动创建一个/data/db作为数据存储目录
  • 关闭服务 :ctrl+c
  • 查看数据库列表show dbs
  • 查看当前操作的数据库db
  • 切换到指定数据库,如没有则(当有数据的时候)新建:use 数据库名称
  • 插入数据 db.student.insertOne({“name”:“jack”})
  • 查询集合(“表==数组”)show conllections
  • 查询集合下所有的数据db.student.find()

5.4. node.js操作mongodb(所有对mongodb数据库操作都是异步的)

# 使用第三方monggose操作(基于上面的包再次封装)(推荐)

//安装npm -i install monggose
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

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

const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));

# 6. node.js连接mongodb设计集合结构

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//设计集合结构(表结构)
//字段名称是表结构中的属性名称(约束)值
var blogSchema = new Schema({
	title:  String,
	author: String,
	body:   String,
	comments: [{ body: String, date: Date }],
	date: { type: Date, default: Date.now },
	hidden: Boolean,
	meta: {
	  votes: Number,
	  favs:  Number,
	  require:true
	}
});
//将文档结构发布为模型
//第一个参数表示数据库名称,mongoose会自动将大写名词的字符串生成小写复数的集合名称例如这里的Blog会变成blogs集合名称
//第二个参数表示架构Schema
var Blog = mongoose.model('Blog', blogSchema);

# 插入数据

var testsave = new Blog({
	title:  "haha",
	author: "junye",
	body:   "ceshi",
	comments: [{ body: "xh", date: "2018-08-06" }],
	date: { type: "2018-08-06", default: "2018-08-06" },
	hidden: false,
	meta: {
		1
	}

})
test.save((function)(err,ret//返回值){
	if(err){console.log('保存失败')}
	else{console.log('保存成功')}
})

# 查询数据

//查询所有
Blog.find(function(err,ret){
	if(err){
		console.log('查询失败')
	}else{console.log(ret)//返回所有数组}
})
//条件查询(可能多个)
Blog.find({title:'haha'},function(err,ret){
	if(err){
		console.log('查询失败')
	}else{console.log(ret)//返回所有数组}
})
//查询一个
Blog.findOne({title:'haha'},function(err,ret){
	if(err){
		console.log('查询失败')
	}else{console.log(ret)//返回所有数组}
})

# 删除数据

//根据条件删除所有
Blog.remove({title:'haha'},function(err,ret){
	if(err){
		console.log('删除失败')
	}else{console.log('删除成功')}
})
//根据条件删除一个
Blog.findOneAndRemove(conditions,[options],[callback])
//根据id删除一个
Model.findByIdAndRemove(conditions,[options],[callback])

# 更新数据

//根据条件更新所有
Blog.findByIdAndUpdate(conditions,[options],[callback])
//根据指定条件更新一个
Blog.findOneAndUpdate([conditions],[update][options],[callback])
//根据id更新一个
Blog.findByIdAndUpdate('xxxxxxxx',function(err,ret){
	if(err){
		console.log('更新失败')
	}else{console.log(ret)//更新成功}
})

# 异步promise操作数据库的方法
User.findOne({
	username:'456'
})
.then(function(user){
	if(user){
		console.log('用户已存在')
	}else{
		return new User({
			username:'aaa'
			password:'123'
			email:'dads'
		}).save()
	}
}).then(function(ret){

})
# 异步回调操作数据库的方法
User.findOne({username:'456'},function(user){}
	if(user){
	}else{
		new User({
			username:'aaa'
			password:'123'
			email:'dads'
		}),save(function(){
		
		})
	}
)

总结

本文介绍了的MongoDB使用,如有问题欢迎私信和评论

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值