MongoDB
约 1138 字大约 4 分钟
MongoDB是nosql数据库的一种,对node.js有比较好的支持
是非关系型数据库
- 1. 关系型数据库与非关系型数据库
- 2. MongoDB是最接近关系型数据库的非关系型数据库
- 支持的数据类型√
- 3. mongodb数据库的基本概念
- MongoDB命令
- 5.4. node.js操作mongodb(所有对mongodb数据库操作都是异步的)
1. 关系型数据库与非关系型数据库
- 关系型数据库是指表与表之间存在联系
- 所有关系型数据库在操作之前都要设计表结构
- 所有关系型数据库都要通过sql语音来操作
- 关系型数据库的表还支持约束
- 非关系型数据库非常灵活(键值对)
2. MongoDB是最接近关系型数据库的非关系型数据库
- 数据库→数据库;数据表→集合;表记录→文档对象
支持的数据类型√
1、String
2、Integer
3、Double
4、Boolean
5、Object
6、Object ID
7、Arrays
8、Min/Max Keys
9、Datetime
10、Code
11、Regular Expression 等
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(){
})
}
)