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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容