MongoDB
1. 关系型数据库和非关系型数据库
- 表就是关系
- 表与表之间存在关系
- 所有的关系型数据库都需要通过
sql
语言来操作 - 所有的关系型数据库在操作之前都需要设计表结构
- 而且数据库还支持约束
- 唯一的
- 主键
- 默认值
- 非空
- 所有的关系型数据库都需要通过
- 非关系型数据库 非常灵活
- 有的非关系型数据库就是
key-value
键值对 - 但是在
MongoDB
是长得最像关系型数据库的非关系型数据库
- 数据库 — 数据库
- 数据表 — 集合(数组)
- 表记录 — 文档对象
- MongoDB 不需要设计表结构
- 你可以任意往里面寸数据,没有结构性一说
启动和关闭数据库
启动:
#mongodb 默认使用执行 mongod 命令所处盘符根目录下的 /data/db/ 作为自己的数据存储目录
#所以在第一次执行该命令之前先自己手动新建一个 /data/db
#mongodb需要在环境变量中配置,在path中加入 安装目录的/bin路径
mongod
如果想要修改默认的数据存储目录,可以:
mongod --dbpath=数据存储目录路径
停止:
#在开启服务的控制台,直接 ctrl+c 即可停止
#或者直接关闭开启服务的控制台也可以
连接数据库
连接:
#该命令默认连接本机的 MongoDB 服务
mongo
退出:
# 在连接状态 命令行输入 exit 退出连接
exit
基本命令
show dbs
- 查看显示数据库
db
- 查看当前操作的数据库
use 数据库名称
- 切换到指定的数据库 (如果没有会新建)
- 插入数据
在Node中使用MongoDB
默认端口是 27017
使用官方的
mongodb
包来操作或者 使用第三方
mongoose
来操作第三方包:
mongoose
是基于mongodb
进行再一次封装安装:
npm i mongoose
设计
Schema
发布model
// 0.引包 var mongoose = require('mongoose') // 1.连接数据库,在这里是连接本地的test数据库,数据库如果不存在,在插入第一条数据时,会自动创建 mongoose.connect('mongodb://localhost/test') mongoose.Promise = global.Promise // 2.设计集合结构(表结构) //字段名称就是表结构中的属性名称 //约束属性的值,保证数据的完整性 var Schema = mongoose.Schema var userSchema = new Schema({ username:{ type:String, required:true //表示必须有 }, password:{ type:String, required:true }, email: { type:String }, gender:{ type:number, enum:[0,1], //只能是0或1 default:0 //默认为0 } }) // 3.将文档结构发布为模型 // mongoose.model方法就是用来将一个架构发布为model // 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名 //称,mongoose会自动将大写名词的字符串生成 小写复数 的集合名称 // 例如这里的 User 最终会变为 users的集合名称 // 第二个参数: 架构 Schema // 返回值: 模型构造函数 var User = mongoose.model('User',userSchema) //如果要导出则 module.exports = User
在传Date的时候,如果设置Date.now(获取现在时间的时间戳) 不能带“()”,因为会立刻调用。所以要传一个方法,在new Schema的时候,它看到这里传的是一个方法就会自动进行调用获取当前时间戳。
new Schema({ creatDate: { type: Date, default: Date.now //当你没有传Date值时,mongoose会调用default的值,当发现是方法时就会进行调用,获取返回值 } })
增添数据
// 4.当我们有了这个模型构造函数之后,就可以使用这个构造函数对users中的数据进行操作(增删改查) var admin = new User({ username:"admin", password:"123456", email:"admin@admin.com" }) admin.save(function (err) { if (err) { console.log(err) }else { console.log('success') } })
查询数据
//查询所有的数据 User.find(function (err,result) { if (err) { console.log('查询失败') } else { console.log(result) } }) //查询指定条件的数据 User.find({ username:'admin' },function (err,result) { if (err) { console.log('查询失败') } else { console.log(result) } }) //查询指定条件的单个数据 User.findOne({ username:'admin' },function (err,result) { if (err) { console.log('查询失败') } else { console.log(result) } })
条件查询
//$or表示或,只要符合其中一个条件就返回 User.findOne({ $or: [ {key1:value},{key2:value} ] },function () {...})
删除数据
User.remove({ username: 'admin' },function (err, result){ if (err) { console.log('删除失败') } else { console.log('删除成功') } })
根据指定条件删除
User.findOneAndRemove(conditions,[options],[callback])
修改数据
User.findByIdAndUpdate('5s566256dad2654',{ password:'123' },function (err,result) { if (err) { console.log('修改失败') } else { console.log('修改成功') } })
根据指定条件
User.findOneAndUpdate(conditions,[options],[callback])
注意事项
获得数据中的id需要用
model._id
,并且id会带引号 需要replace(/"/g,'')
去除如果有误希望还望指正。