node快速入门-03

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容