美文网首页
mongoDB [命令行指令] 学习

mongoDB [命令行指令] 学习

作者: squidbrother | 来源:发表于2019-12-08 23:13 被阅读0次
数据库的概念

官网宣传描述:
MongoDB是一个通用的、基于文档的分布式数据库,它是为现代应用程序开发人员和云时代而构建的。没有数据库能让你更有效率。

1.数据库与文件的差异
数据库有表,行,列,更加方便操作数据
数据库提供了接口,方便nodejs php java .net使用 增删查改 功能

2.传统数据库与非关系型数据库
NoSQL - not only sql 20世纪80年代出现,现在大数据时代又被重视

3.使用场景
数据库高并发与高读写的情况下
改良数据高存储与访问的需求
数据高可扩展性时候

4.数据库格式差异
Nosql是一个key value形式

5.Nosql存储数据库类型
key-value形式

6.为什么选择mongoDB
介于关系型数据库与非关系型数据库之间的产品
是非关系型数据库中功能最丰富,最像关系型数据库的
几乎可以实现类似关系型数据库单表查询的绝大部分功能
还支持对数据建立索引
特点:高性能,易部署,存储数据非常方便

安装与配置

官网下载

1.安装
根据操作系统、安装包类型、版本 下载包

2.安装完毕后,配置环境变量
找到mongoDB安装的bin目录,将其路径贴到 我的电脑 高级 环境变量 path中 添加在后面

3.检测全局环境配置完毕与否
win+r cmd进入命令行,输入 mongo 回车

启动与访问

自定义一个文件夹,用来存储mongoDB数据, 放置在非操作系统盘符,防止重装系统,删除数据库
如:
D:\mysoft\myMongoLib

  • 启动数据库服务器
    (不能关闭这个命令行窗口,否则这个数据库会被关闭;不能圈选其中的代码段,否则会挂起)
mongod --dbpath 存储mongoDB数据文件路径
  • 自定义端口号 (尽量使用4位以上的)
mongod --dbpath 存储mongoDB数据文件路径 --port xxxx
  • 启动数据库客户端 (重新打开新的命令行窗口输入)
mongo

会显示连接的URL地址信息: 如 mongodb://127.0.0.1:27017/ 后面可以加上库名称

  • 连接远程数据库
mongo IP地址:27017
开机启动

mongoDB 4.0+ 会自动在 任务管理器 - 服务 中开启,无需开机手动启动数据库客户端

常用操作指令 / sql常用指令

【增】
先切换库,再增加表下对应数据 (有了数据,自然表也有了,库如果之前没有,也有了;前提要先use下)
use 库名
db.表名.insert({ 'name':'zhangsan' })

【查】
show dbsshow databases --- 显示所有的库
db --- 显示当前所在数据库
use 库名 --- 切换库
show collections --- 显示当前库下所有的表
db.表名.find() --- 显示某一张表所有的数据
db.表名.find().count() --- 显示当前所有数据的条数

  • 精确搜索
    db.表名.find({'name':'zhangsan'}) --- 查找name为zhangsan的数据
  • 范围搜索
    db.表名.find({'age':{$gt:18}}) --- 显示age大于18的数据
    db.表名.find({'age':{$gte:18}}) --- 显示age大于等于18的数据
    db.表名.find({'age':{$lt:20}}) --- 显示age小于20的数据
    db.表名.find({'age':{$lte:20}}) --- 显示age小于等于20的数据
    db.表名.find({'age':{$gt:10,$lt:20}}) --- 显示age大于10且小于20的数据
  • 或查找
    db.表名.find({$or:[{'age':18},{'age':20}]}) --- 显示age等于18 或者 等于20的数据
  • 模糊搜索
    db.表名.find({'name':/^z/}) --- 显示name以z开头的数据

【查询后修饰结果】

  • 返回结果升降序显示
    db.表名.find().sort({'age':1}) --- 显示所有数据,且按照年龄升序排列
    db.表名.find().sort({'age':-1}) --- 显示所有数据,且按照年龄降序排列
  • 显示规定条数结果
    db.表名.find().limit(2) --- 显示前2条
    db.表名.find().skip(2).limit(2) --- 显示第3、第4条
  • 只显示结果中的某一个字段
    db.表名.find({},{'name':1}) --- 显示所有数据,且只显示name字段信息

【改】
对张三增加一个年龄
db.表名.update({ 'name':'zhangsan' },{$set:{'age':11}})
修改张三的名字
db.表名.update({'name':'zhangsan'},{$set:{'name':'lisi'}})

【删】

  • 删除数据的某一个字段
    db.表名.update({'name':'news'},{$unset:{'__v':''}}) --- 删除name为news数据的'__v'的字段

  • 批量 删除数据的某一个字段
    db.表名.update({'name':'news'},{$unset:{'__v':''}},{multi:true}) --- 批量删除上述操作

  • 删除数据
    db.表名.remove() --- 删除当前表所有的数据(意味着这个表也就消失了)
    db.表名.remove({'age':20}) --- 删除当前表age为20的数据
    db.表名.remove({'age':20},{justOne:true}) --- 删除表内age为20的数据,且只删除第一个被找到的

  • 删除表
    db.表名.drop() --- 删除指定的表

  • 删除库
    db.dropDatabase() --- 删除当前所在的库

索引操作与查询时间

大批量数据查询,需要消耗时间,如果查询的属性,正好有被用于索引,则查询速度会更加迅速

【获取索引】
db.表名.getIndexes() --- 获取表内的所有索引
【添加索引】
db.表名.ensureIndex({'name':1}) --- 为当前表的name字段,增加索引
db.表名.ensureIndex({"userId":1},{"unique":true}); --- 为当前表的userId字段,增加索引(且是唯一的)
【删除索引】
db.表名.dropIndex({'name':1}) --- 删除当前表的name字段索引
【查询时间】
db.表名.find({"name":"zhangsan"}).explain("executionStats") --- 查询name为zhangsan的数据 所消耗的时间
通过executionTimeMillis看反应时间(单位毫秒)

相关文章

网友评论

      本文标题:mongoDB [命令行指令] 学习

      本文链接:https://www.haomeiwen.com/subject/qusvgctx.html