前端程序猿学习mongoDB之旅(一)

作为一名前端程序猿,怎么可以不学习mongoDB,BSON(binary json)始于JSON,nodejs+mongodb的搭配让前端涉猎后台项目更加得心应手。话不多说,开整!

一、数据库的安装

下载: 官网下载地址
在这里插入图片描述
下载最新版本,几乎是傻瓜安装
注意:这一步取消选中,不然会下载MongoDB Compass (一个图形界面管理工具),安装时间将大大增加。在这里插入图片描述
如果安装的不是系统盘,还需要配置环境变量
mongodb配置环境变量

二、mongoDB简介

  • 旨在为WEB应用提供可扩展的高性能的数据存储方案
  • 数据存储结构有key 、value组成,类似JSON
  • 属于NoSql(not only sql),非关系型数据库、分布式计算
  • 国外很多大厂使用:facebook google mozilia so on…

三、可视化管理工具

可视化管理工具太多了。例如Database Master、Fang of Mongo、Mongo3、studio 3t…自行选择,用习惯了哪个都行,我是大佬带我用的studiio 3t,界面简洁very nice。
可视化工具studio3T展示效果如下:

  • tree ivew
    在这里插入图片描述

  • table view
    在这里插入图片描述

  • json view

四、启动数据库与命令行操作

  • mongod

mongod 命令可来启用数据库服务,即搭建并开启服务器,可以通过默认端口27017被访问( http://localhos:27017/)

mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。

配置数据库文件的存储位置,如果不配置双击安装目录bin下的mongod.exe ,会闪退

mongod -dbpath "D:\mongodatabase\data"//安装时配置的 data存放路径

  • mongo

双击安装目录bin下的mongo.exe 即启动mongodb shell客户端(一个互动的JavaScript接口的MongoDB,可以使用MongoShell来查询和更新数据以及执行管理操作)

更多操作方法 mongodb shell操作

五、基础概念学习

基本概念:数据库 集合 文档
盗个图mongodb和sql的对应关系
在这里插入图片描述

六、基本CURD API

创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)

1、数据库操作

  • 连接数据库
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • 创建数据库
use DATABASE_NAME
  • 删除数据库
db.dropDatabase()

2、集合操作

  • 创建集合
db.createCollection(name, options)
  • 删除集合
db.collection.drop()

3、文档操作

  • 插入文档
db.COLLECTION_NAME.insert(document)
db.COLLECTION_NAME.save(document)
db.collection.insertOne()
db.collection.replaceOne()
db.collection.insertMany():
  • 更新文档
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
  • 删除文档
db.collection.remove(
   <query>,
   <justOne>
)
//remove() 方法 并不会真正释放空间。repairDatabase方法来回收磁盘空间
db.repairDatabase()

db.inventory.deleteMany({})
db.inventory.deleteOne( { status: "D" } )
  • 查询文档
db.collection.find(query, projection)
// and 查询
db.col.find({key1:value1, key2:value2}).pretty()
//or查询
db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
文档原子操作(基本操作)
  • $set 用来指定一个键并更新键值,若键不存在并创建。
  • $unset 用来删除一个键。
  • $inc 可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作
  • $push $pushAll把value追加到field里面去,
  • $pull 从数组field内删除一个等于value值。
  • $addToSet增加一个值到数组内,而且只有当这个值不在数组内才增加。
  • $pop删除数组的第一个或最后一个元素
  • $rename 修改字段名称
  • $bit 位操作,integer类型

七、操作符和基础方法

  • $gt 大于
  • $lt 小于
  • $gte 大于等于
  • $lte 小于等于

例: 查找col集合 num域 小于200大于100的数据

db.col.find({num : {$lt :200, $gt : 100}})
  • $type 匹配某种数据类型的数据

例:查找col集合 title为string类型的数据

db.col.find({"title" : {$type : 'string'}})
  • limit() skip() 跳过与限定数量
    例:分页查询
db.col.find().limit(10).skip(10)
  • sort() 排序 1升序 -1降序

  • createIndex() 创建索引

  • aggregate()聚合 (用于处理数据诸如统计平均值,求和等)

八、进阶操作

  • 文档之间的关系 (嵌入式,引用式)
  • 不同集合之间的文档关联 DBRefs { $ref : , $id : , $db : }
  • 覆盖索引 (ensureIndex 存在于RAM,读取速度快)

高级索引:索引数组 、索引子文档

  • MapReduce计算模型

Map 函数调用 emit(key, value), 遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。

db.collection.mapReduce(
   function() {emit(key,value);},  //map 函数
   function(key,values) {return reduceFunction},   //reduce 函数
   {
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)
  • 全文检索

创建全文检索

db.col.ensureIndex({post_text:"text"})

使用全文索引

db.col.find({$text:{$search:"str"}})

  • 正则表达式

>db.col.find({post_text:{$regex:"regStr"}})

  • gridFS

添加文件

mongofiles.exe -d gridfs put song.mp3

查看文件中的文档

db.fs.files.find()

查看区块数据

db.fs.chunks.find({files_id:ObjectId('id')})

  • 固定集合(后插入的元素就会覆盖最初始的头部的元素)

db.createCollection("cappedLogCol",{capped:true,size:10000,max:1000})

九、运维操作

  • 复制迁移
  • 分片 (多台服务器分割数据)
  • 备份与恢复
  • 监控
  • 查看分析 explain() hint()

十、Mongoose

Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具

mongoose官网
简单理解
nodejs→express
mongo→mongoose

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值