mongoDb
干嘛的:数据库,nosql(非关系型|缓存型)
场景:解决大规模数据集合多重数据种类
下载:https://www.mongodb.com/download-center
安装:https://www.cnblogs.com/keyi/p/10984514.html
测试服务端是否启动:
启动客户端: 安装目录\Server\4.0\bin\ mongo 回车
手动启动服务端:安装目录\Server\4.0\bin\ mongod 回车
port=27017 默认端口
mongodb://127.0.0.1:27017 协议+IP+端口
指定数据存储目录: 需要指定一次
mongod --dbpath c:\data\db db目录要手动创建
环境变量:为了在任意盘符下去启动库 mongod服务端|mongo客户端
开启客户端: mongo 回车
UI工具软件: 收费(下载+缴费)
原生命令行(shell): cmd->mongo回车 git bash - > mongo回车 webstrom->dos/linux
nodejs: 安装mongodb的包(客户端)
和mysql对比
名词
mysql mongoDb
database(库) database(库)
table(表) collection(集合)
row(一条数据) document(文档)
column(字段) field(区域)
...
存储方式:
mysql 二维表
MongoDB json
mongodb命令行操作方式: 声明式 | obj.api()
库操作:
查: show dbs
db 查看当前库
建: use 库名 没有建,有就切换
删: db.dropDatabase() 删除当前库
集合(表)操作:
建:db.createCollection('表名',{配置})
配置:{size:文件大小,capped:true,max:条数|文档数} capped定量
db.表(集合).isCapped() 返回 true/false 是否是定量
查:show collections / db.getCollectionNames()
删:db.表|集合.drop()
文档(row)操作:
增:
db.集合.save({}) / db.集合.insert({}) 添加一条
db.insertOne({})
db.集合.save([{},{}]) / db.集合.insert([{},{}]) 多条
insert 不会替换相同ID save会
删:
db.集合.deleteOne({要删数据条件描述}) db.集合.remove({条件},true) 一条
db.集合.remove({要删数据条件描述}) 多条
db.集合.remove({}) 清空表
改:
db.集合.udpate({查询条件},{替换条件},插入false,全替换false)
替换后的:
{$set:{数据},$inc:{age:1}}
查:
所有:db.集合.find({条件)
条数: db.集合.find().count()
去重:db.集合.distinct(key)
条件
{age:22} age == 22
{age:{$gt:22}} age > 22
{age:{$lt:22}} age < 22
{age:{$gte:22}} age>=22
{age:{$lte:22}} age<=22
{age:{$lte:122,$gte:22}} age<=122 && age>=22
{$or:[{age:22},{age:122}]} 22 or 122
{key:value,key2,value2} value && value2
{name:/正则/}
db.集合.find({条件},{指定要显示列区域})
指定要显示列区域: 区域名username:1 显示着个区域,其他不显示
指定要显示列区域: 区域名username:0 不显示着个区域,其他显示
_id 是默认显示
限定:
db.集合.find().limit(number) 限定
db.集合.find().skip(number) 跳过
db.集合.findOne() / db.集合.find().limit(1) 查询第一条
排
升:db.集合.find().sort({key:1,key2:'a'})
降:db.集合.find().sort({key:-1})
db.集合.find({条件},{指定显示区域}).skip(10).limit(10).sort({key:1})
db.insertOne({数据描述})
mongodb 客户端包
1. require('mongodb'); 引入模块 第三方模块
2. 创建客户端 mongoCt = mongodb.MongoClient
3. 创建链接 mongoCt.connect('协议://地址:端口',回调(err,client))
3.5 链库 client.db('库名')
4. 链接集合(表) user = db.collection('集合名');
5. user.API(1,2,fn) 集合操作 返回 对象
one === 1 Many 多个
增
insertOne(对象数据,(err,res)=>{}) res = 对象
insertMany(arr数据,(err,res)=>{}) res = 对象
res.result.n/ok 结果
res.ops内容
res.insertedId 插入后的id
删:
deleteOne({条件},(err,result)=>{})
改:
updateOne({条件},{更新后},(err,res)=>{})
updateMany({条件},{更新后},(err,res)=>{})
updateMany({条件},{更新后},{配置},(err,res)=>{})
配置: upsert:true 插入
projection:true 全局替换
查:
user.find({条件},{skip:1,limit:1,projection:{要显示的key:1}},(err,result)=>{result=对象})
user.find({条件},{projection:{key:0}}).toArray((err,result)=>{reulst==arr})
user.countDocuments((err,num)=>{num返回数量})
排序
user.find(..).sort({key:-1}).toArray..
user.find({},{projection:{},sort:{key:-1}}).toArray..
6. client.close() 关闭库链接
Express 应用程序生成器: 脚手架 | 命令行工具
干嘛的:自动搭建项目环境的,无需手动
安装:需要安装到全局
npm install express-generator -g 验证 express -h
创建项目:
express -e 目录 | . 当前目录创建
-e 需要ejs模板引擎
express -f 强制在非空目录下创建
cd 目录
npm install 安装依赖包
npm start -> node ./bin/www
参考资料: http://www.expressjs.com.cn/starter/generator.html
RESTful API
在Restful之前的操作:
增 POST /user/save POST 新增用户
删 GET|POST /user/delete 删除用户信息
改 POST /user/update POST 修改用户信息
查 GET /user/query/1 根据用户id查询用户数据
RESTful风格:
增 POST /user body中包含数据
删 DELETE /user/1 | user?id=1 根据ID删除用户信息
改 PUT|PATCH /user body中包含数据 PUT覆盖修改 PATCH局部修改
查 GET /user/1 | user?id=1 GET 根据用户id查询用户数据 没有id查询所有 /1 返对象 id=1 返回数组>对象
分页 _page 第几页, _limit一页多少条
GET /user?_page=7 不传递默认0条
GET /user?_page=7&_limit=20 不传递默认10条
排序 _sort设定排序的字段 _order设定排序的方式(默认升序)
GET /user?_sort=views&_order=asc
GET /user/1/comments?_sort=votes&_order=asc
GET /user?_sort=title,views&_order=desc,asc 多个字段排序
任意切片数据 _start 开始不包含 _end 结束包含
GET /users?_start=20&_end=30
GET /user/1/comments?_start=20&_end=30
GET /user/1/comments?_start=20&_limit=10
全文检索 GET /user?q=九哥
项目:
1. 定义数据字典(数据库设计) | api 请求方式
banner: [
{
"_id" : xx,
"title" : "1",
"sub_title" : "1",
"banner" : "xxxx",
"time":234234,
"detail" : {
"auth" : "",
"content" : "<p>xxx<p>",
"icon" : "/upload/banner/9d4083b4f1d28a6c0fb4c463526790eb.jpg"
},
}
]
product: home/follow/column
{
"_id" : xx,
"title" : "1_",
"des" : "2",
"time":234234,
"detail" : {
"auth" : "4",
"content" :"<p>3</p>",
"auth_icon" : "/upload/user/xxx.jpg"
}
}
user:
{
"_id" : xx,
"username" : "alex",
"password" : "alex123",
"follow" : "100",
"fans" : "200",
"nikename" : "九叔_",
"icon" : "/upload/968a3b7218ee744931276a64c9b7ea01.png",
"time" : 1551620448550
}
2. 素材准备(静态页面模板用户端|管理端)
3. 搭建服务器
4. 处理 http请求,拿到数据,后端渲染页面,前端制作API
5. 项目目录规划
bin |-
www 启动文件
utils|- 全局公共
|- douban|mgd|mysql
config 全局配置
|- global (_page,_limit,q,upload...)
|- server (local,http,https)
public 资源托管
|-admin 管理端
|-template 用户端
|-upload
|- banner|product|user
|- product
|- home|follow|column
routes 子服务,路由
admin 管理端
|- feedback
|- success|error
|- product
|- add|del|check
|- banner
|- add|del|check
|- user
|- add|del|check
|- home| product|banner|user
|- islogin | login | reg | logout
api 用户端
|- product (home/follow/column) | banner | user | login | reg | logout
proxy 代理
...
views 管理端模板
|- feedback
|- success|error|app_error
|- ... 结构同 admin 管理端
|- common
|- header|footer|slider|crumb|toolbar|paging