MongoDB
简介
数据库简介
- 数据库仓库
- 硬盘存储
- 持久化
- 文档数据库
数据库分类
- 关系型数据库 (RDBMS)
- MySql、Oracle、DB2、SQL Server ...
- 数据存储在表中
- 非关系型数据库(NoSQL)
- MongoDB、Redis ...
- 键值对数据库
- 文档数据库
MongoDB简介
- 快速开发WEB应用
- 极简、灵活、作为Web应用一部分
- 面向文档,存储结构增强JSON(BSON)
MongoDB概念
数据库 ( database )
数据库是一个仓库,可以存放集合。
集合 ( collection )
集合类似于数组,可以存放文档。
文档 ( document )
数据库最小单位,操作和存储都是面向文档的。
安装配置
配置环境变量
将安装目录的可知行文件目录添加到系统的环境变量中
D:\Program Files\MongoDB\Server\3.2\bin
配置到Path中
cmd
mongo -version
MongoDB shell version: 3.2.4
启动服务器
在系统根目录创建一个data\db文件夹`C:\data\db`存放数据库
mongod --storageEngine=mmapv1 #32位系统
mongod --dbpath [path] -p [port] #自定生成目录及端口
!
连接服务器
使用命令mongo`C:\Windows\system32> mongo`
db address can be:
foo foo database on local machine
192.169.0.5/foo foo database on 192.168.0.5 machine
192.169.0.5:9999/foo foo database on 192.168.0.5 machine on port 9999
说明文档
基本命令
查看命令
show dbs 显示所有数据库
use [db_name][collections_name] 进入数据库(没有也可进入)
db 查看数据库位置
show collections(tables) 查看数据库集合
CRUD命令
#collection 应替换为具体集合名称
#插入###############
db.collection.insert(doc) 插入一或多文档(当前数据库)
#{json},[{key:value,key:value},{}]
#自动为文档添加 _id 字段 _id可以自行添加
db.collection.inserOnet(doc) 单条插入,传入对象
db.collection.insert(doc) 批量插入,传入数组
#查询###############
db.collection.find() 查看全部记录
db.collection.find({key:value}) 条件查询
db.collection.find({key:value},{}) 多条件
db.collection.find().count() 查询结果数
db.collection.findOne() 符合条件的第一个文档
#修改###############
db.collection.update({条件},{修改值},{修改条件})
修改条件:{
upsert:boolean,
multi:boolean,#多个修改
writeConcern:doc,
collation:doc
}
#默认改一个
#完全修改 修改值覆盖取代原值
db.collection.update({条件},$set:{修改值})
#部分修改,修改值中覆盖对应原值
db.collection.update({条件},$unset:{修改值})
#删除修改值部分
#单个修改
db.collection.updateOne()
#批量修改
db.collection.updateMany()
#替换
db.collection.replaceOne()
#删除###############
db.collection.remove({条件},参数)
#默认多删除 1 一个 多个 0 {} 空条件清空
db.collection.deleteOne({条件}) 删除一个
db.collection.deleteMany({条件}) 删除多个
db.collection.drop();
db.dropDatabase();
分页查询
db.collection.find().skip((页码-1)*记录数).limit(记录数)
#方法链顺序可以任意
var user_id= db.collection.findOne().user_id
#级联查询时可以将数据先查出保留在变量中,支持脚本语言的所有写法
文档关系
一对一
通过内嵌文档来体现一对一关系,对象中添加对象
一对多
在对象中嵌入多个对象
多对多
多个对象中嵌入多个对象
文档的关联关系由文档中的对象情况决定,存入为json格式,关联关系的映射由存入的数据决定,关联关系的维护基本依靠写入的数据,数据库不具备关系维护能力。
排列和投影
排序
db.collection.find().sort() 制定排序规则
# sort({字段:排序规则,字段:排序规则})
# 排序规则:1:升序 -1:降序
投影
db.collection.find({},{字段:投影规则})
#投影规则:1:显示 -1:不现实
MongoOSE
通过使用MongoOSE可以在Node.js中使用MongoDB模块,属于对象文档模型库(ODM),将数据库操作转换为对象操作。
优点:
- 创建模式结构(约束)
- 验证对象/文档
- 类型转换
- 使用中间件应用业务逻辑挂钩
- 优于原生驱动
对象
Schema(模式对象)
数据结构约束
Model
对应数据库的集合(表)
Document
对应数据库的文档(记录)
创建顺序:Sechema -> Model -> Document
使用步骤
- 安装
npm i mongoose --save
- 引入mongoose
var mge = require("mongoose")
- 连接数据库
mge.connect(url,{useMongoClient:true})
- 监听状态
mge.connection.one("open",function(){})
- 关闭数据库连接
mongoose.disconnect()
代码实例
var Schema = mongoose.Schema;
//表约束
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String
});
//自动将集合名变为复数
var stuModel = moogoose.model("student",stuSchema);
//插入记录
//Model.create(doc(s),[callback])
stuModel.create)({插入对象},function(error){
if(!err){
console.log("success");
}
});
var stu = new StuModel({
key:value,
...
});
stu.save(function(err){
if(!err){
console.log("success");
}
});
connection.js
var mongoose = require("mongoose");
mongoose.connect("url",{});
mongoose.connection.one("open",function(){
console.log("success");![](https://images2018.cnblogs.com/blog/1481652/201809/1481652-20180907221950553-982376891.png)
});
stuModels.js
require("mongoose")
var Schema = mongoose.Schema;
//表约束
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String
});
//自动将集合名变为复数
var stuModel = moogoose.model("student",stuSchema);
//export.model = stuSchema;
model.export = stuSchema;
otherfile.js
require("./uri/connection") //即可连接
//var stuModel = require("./uri/stuModel").model;
var stuModel = require("./uri/stuModel");
...